|
어떤 자연수 n 이 소수인지 구할때, n 이 작을 경우에는 다음과 같은 방법을 사용한다. Notes void trial(int end)
{ for( int a = 2; a <= end; a++ ) { if( a%2 == 0 && a != 2 ) { prime[a] = 0; continue; } bool isprime = true;
for( int b = 2; b*b <= a; b++ ) { if( a%b == 0 ) { isprime = false; break; } } if( isprime ) prime[a] = 1; } } 2. 에라토스테네스의 체(Sieve of Eratosthenes) void sieve(int end)
{ for( int a = 2; a*a <= end; a++ ) { if( prime[a] == 0 ) // 'a' is a prime { for( int b = a*2; b <= end; b += a ) prime[b] = 1; } } } 소수일 것 같은 수 (Probable Prime) 판별법 2. 페르마의 작은 정리 (Fermat's Little Theorem)
페르마의 마지막 정리로 유명한 수학자 페르마가 제안한 정리. p 가 a로 나눠지지 않는 소수라면 ap-1 = 1 (mod p) 를 만족해야 한다. 이때 상기 정리를 만족하지 않는 수는 합성수이며, 상기 정리를 만족하는 수는 소수일 가능성이 매우 높은 수(Probable Prime) 가 된다. 증명은 상기 링크 참조. 3. 밀러-라빈 소수판별법 (Miller-Rabin Primality Test) n 이 소수인지를 검사하려 할 때, 다음 두 식이 성립한다면 a 는 n 이 합성수라는 강한 증거가 된다. ( 이 식이 성립한다면 n 은 소수일 가능성이 매우 높은 수가 된다.)
'Contest > Algorithm' 카테고리의 다른 글
|
BLOG ARTICLE 소수 | 2 ARTICLE FOUND
- 2008/01/18 소수 구하기 (Finding Primes) 알고리즘 (6)
- 2007/10/08 매미의 수명과 소수와의 관계
|
페르마의 마지막 정리 라는 책을 읽다가 흥미로운 이야기가 있었다. 'Gossip' 카테고리의 다른 글
|


for all





앗.. 문득 제목에 오타가 보이네요.. finding primes 이네요..
땡큐!
급히 수정.. ^^
감사합니다. 좋은 정보 얻고 갑니다.
It's my pleasure~
좋은 포스트네요.
네 방문해 주셔서 감사합니다. ^^