맨위로가기

소수판별법

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

소수 판별법은 주어진 자연수가 소수인지 합성수인지 판별하는 방법을 연구하는 수학 분야이다. 고대부터 에라토스테네스의 체와 같은 방법이 사용되었으며, 페르마 소정리와 같은 정리의 발견으로 연구가 발전했다. 윌슨의 정리, 페르마 소수판별법 등 다양한 판별법이 존재하며, 20세기 후반 컴퓨터 과학 발전과 함께 확률적 및 결정론적 소수 판별법 알고리즘이 개발되었다.

소수 판별법에는 확률론적 소수 판별법과 결정론적 소수 판별법이 있으며, 페르마 소수판별법, 솔로바이-스트라센 소수판별법, 밀러-라빈 소수 판별법, 뤼카 소수판별법 등이 존재한다. 결정론적 소수 판별법에는 뤼카-레머 소수판별법, 프로트의 정리, AKS 소수 판별법 등이 있다. 각 판별법은 계산 복잡도, 정확도, 적용 가능 범위에서 차이를 보인다.

계산 복잡도 이론에서 소수 판별 문제는 PRIMES로 표기되며, AKS 소수판별법의 등장으로 복잡도 클래스 P에 속하는 것으로 증명되었다. 소수 판별 프로그램은 파이썬 등으로 구현될 수 있다.

더 읽어볼만한 페이지

  • 소수 판별법 - 에라토스테네스의 체
    에라토스테네스의 체는 주어진 범위에서 소수를 효율적으로 찾는 알고리즘으로, 특정 구간 내의 모든 수를 나열한 후 가장 작은 소수의 배수들을 제거하는 과정을 반복하여 소수만을 남기는 방식으로 작동하며, 다양한 변형과 최적화 기법이 존재하고, O(n \log \log n)의 시간 복잡도를 가진다.
  • 소수 판별법 - 밀러-라빈 소수판별법
    밀러-라빈 소수판별법은 페르마 소정리를 기반으로 주어진 수가 소수인지 판별하는 확률적 알고리즘으로, 합성수를 소수로 잘못 판별할 가능성이 있지만 검사를 반복할수록 정확도가 높아지며, 일반화 리만 가설이 참일 경우 결정론적 알고리즘으로 전환될 수 있다.
소수판별법
개요
분야수론, 계산 복잡도 이론
문제주어진 수가 소수인지 판별
복잡도 부류co-NP
소수 판별법
자명한 방법시행 나눗셈
확률적 방법페르마 소수판별법
밀러-라빈 소수판별법
Solovay–Strassen 소수판별법
Baillie–PSW 소수판별법
결정론적 방법AKS 소수판별법
뤼카-레머 소수판별법
Adleman–Pomerance–Rumely 소수판별법
ECPP 소수판별법

2. 역사적 배경

소수 판별법은 고대부터 수학자들의 중요한 연구 주제였다. 에라토스테네스의 체와 같은 고전적인 방법은 작은 수에 대해서는 효과적이지만, 큰 수에 대해서는 비효율적이다. 17세기 페르마 소정리가 발견되면서 소수 판별법 연구에 새로운 전기가 마련되었으며, 이후 윌슨의 정리, 뤼카 판정법 등 다양한 판정법이 등장했다.

윌슨의 정리를 이용한 방법은 소수에서만 성립하는 다음 성질을 이용한다.

:(p-1)!≡-1(mod p)

어떤 자연수 n이 소수인지 합성수인지를 판별하려면 위 공식의 p 자리에 n을 대입해서 결과가 -1이 나오면 소수, 아니면 합성수라고 판별한다. 이 방법은 직접 나누는 방법과 같이 간편하지만 p가 30 이상이 되면 그 팩토리얼을 계산하기 힘들어지기 때문에 거의 쓰이지 않는다.

페르마 소수판별법은 페르마 소정리를 이용하는 것으로, a와 p가 서로소이고 a
:ap-1≡1(mod p)

만약 어떤 자연수 N을 이 식의 p 자리에 대입했을 때 성립하지 않으면 N은 합성수이다. 반대로, 어떤 자연수 N이 다음의 관계를 만족하면 이 수는 확률적 소수이며, 그렇다고 해서 이 수가 반드시 소수가 되지는 않는다.

20세기 후반 컴퓨터 과학의 발전과 함께 확률적 소수 판별법, 결정론적 소수 판별법 등 효율적인 알고리즘들이 개발되었다. 특히, 2002년 발표된 AKS 소수 판별법은 최초로 모든 자연수에 대해 다항 시간 내에 작동하는 결정론적 알고리즘으로, 소수 판별법 연구에 획기적인 발전을 가져왔다.

2. 1. 한국에서의 소수 판별법 연구

3. 소수 판별법의 종류

확률론적 소수 판별법은 주어진 수가 소수일 가능성이 높은지 낮은지를 확률적으로 판별하는 알고리즘이다. 이 방법은 결과가 합성수이면 해당 수는 확실히 합성수이지만, 결과가 소수라고 해서 반드시 소수인 것은 아니다. 따라서 결과가 소수로 나오면 그 수는 확률적 소수가 된다.

페르마의 소정리를 이용하는 페르마 소수판별법은 a와 p가 서로소이고 aa^{p-1}\equiv1\pmod{p} 식이 성립하는 것을 이용한다. 만약 어떤 자연수 N을 이 식에 대입했을 때 성립하지 않으면 N은 합성수이다.

레온하르트 오일러가 발견한 정리를 이용하는 솔로바이-스트라센 소수판별법은 소수 p와 서로소인 정수 a에 대하여 a^{\frac{p-1}2}\equiv\left ( \frac{a}{p} \right )\pmod{p} 관계식이 성립하는 것을 이용한다. 여기서 오른쪽 기호는 야코비 기호이다.

밀러-라빈 소수 판별법은 소수인지 확인하고 싶은 수 N에 대해, N-1을 2^s \cdot d (d는 홀수) 꼴로 분해한다. 만약 어떤 양의 정수 a와 0 \le r \le s - 1인 어떤 r에 대하여 a^d\equiv1\pmod{N} 또는 a^{2^r\cdot d}\equiv-1\pmod{N} 이라면 N은 확률적 소수이다. 일반적으로 밀러-라빈 소수판별법은 솔로바이-스트라센 소수판별법보다 강력하여, 더 효과적으로 합성수를 걸러낼 수 있다. 또한 일반화 리만 가설이 맞다면, \lfloor2(\ln N)^2\rfloor개의 a로 이 소수판별법을 이용했을 때 결과가 모두 소수로 나오면 이 수는 실제로 소수가 된다.

에두아르 뤼카의 이름을 딴 뤼카 소수판별법은, 어떤 수 n과 임의의 정수 P>0, Q, 그리고 D=P^2-4Q\neq0에 대하여 함수 \delta(n)=n-\left ( \frac{D}{n} \right )와 뤼카 수열 U_0=0, U_1=1, U_k=PU_{k-1}-QU_{k-2} 그리고 V_0=2, V_1=P, V_k=PV_{k-1}-QV_{k-2}를 정의한다. 만약 U_{\delta(n)}\equiv0\pmod{n} 관계식이 성립하면, n은 확률적 소수이다.

강한 뤼카 소수판별법은 뤼카 소수판별법을 개량한 것으로, 뤼카 수열과 부등식 0 \le r < s를 만족하는 어떤 r에 대하여, U_d\equiv0\pmod{n} 또는 V_{d\cdot2^r}\equiv0\pmod{n} 이라면 n은 확률적 소수이다. 매우 강한 뤼카 소수판별법은, U_d\equiv0\pmod{n} 그리고 V_d\equiv\pm2\pmod{n} 또는 V_{d\cdot2^r}\equiv0\pmod{n} 중 하나라도 성립하면 n은 확률적 소수이다.

베일리-PSW 소수판별법은 밀러-라빈 소수판별법을 먼저 실행한 후, 강한 뤼카 소수판별법을 이용하여 한 번 더 소수판별법을 실행하고, 추가적인 검사를 한다. 현재까지 264 미만의 수들에 대해 이 소수판별법을 이용했을 경우 실제 결과와 한 번도 틀리지 않아 결정론적 소수판별법이라고 추측되지만, 아직 증명되지는 않았다.

존 셀프리지는 ''p''가 홀수이고, ''p'' ≡ ±2 (mod 5)이면, 2''p''−1 ≡ 1 (mod ''p'')와 ''f''''p''+1 ≡ 0 (mod ''p'') (여기서 ''fk''는 ''k''번째 피보나치 수)가 모두 성립할 경우 ''p''가 소수일 것이라고 추측했다.[2]

확률적 소수 판별법은 여러 번 반복하여 오류 확률을 줄일 수 있다.

3. 1. 결정론적 소수 판별법

결정론적 소수판별법은 주어진 수가 소수인지 합성수인지를 확실하게 판별하는 알고리즘이다. 결과가 소수로 나오면 그 수는 무조건 소수이고, 합성수로 나오면 그 수는 무조건 합성수이다.

뤼카-레머 소수판별법은 메르센 수에만 적용할 수 있다. 메르센 수 ''Mp'' = 2''p'' − 1에서 p가 홀수 소수일 때, 수열 ''s0''=4, ''si''=''s''''i''-12-2를 정의할 수 있다. 만약 ''s''''p''-2≡0 (mod 2''p''-1)이면 이 메르센 수는 소수이고, 아니면 합성수이다.

뤼카–레머–리젤 소수판별법은 ''N'' = ''k'' ⋅ 2''n'' − 1 (''k'' < 2''n'')형태의 수 N에 적용 가능하다. 이 방법은 뤼카-레머 소수판별법과 거의 동일하며, ''k''값에 따라 초깃값 (s0)을 다르게 정한다. 예를 들어 k = 1이고 n이 홀수이면 s0=4이다. 이후 ''si''=''s''''i''-12-2를 이용하여 ''s''''n''-2의 값을 구한다. 만약 ''s''''n''-2≡0 (mod N)이면 N은 소수, 아니면 합성수이다.

프로트의 정리프로트 수 ''N''=''k'' ⋅ 2''n'' + 1 (''k''는 홀수, ''k'' < 2''n'')가 소수인지 확인하는 정리이다. 어떤 정수 ''a''에 대해 ''a''(''N''-1)/2≡-1 (mod ''N'')이 성립하면 ''N''은 소수이다.

페팽 소수판별법페르마 수 ''Fn''=22''n''+1에 적용된다. 3(''Fn''-1)/2≡-1 (mod ''Fn'')이 성립하면 ''Fn''은 소수, 아니면 합성수이다. 페팽 소수판별법은 프로트의 정리의 부분정리라고 할 수 있다.

결정론적 뤼카 소수판별법은 1<''a''<''n''인 어떤 정수 ''a''에 대해, ''a''''n''-1≡1 (mod ''n'')이고 ''n''-1의 모든 소인수 ''q''에 대해 ''a''(''n''-1)/''q''≢1 (mod ''n'')이면 ''n''은 소수이다. 이 방법은 ''n''-1의 소인수들을 모두 알아야 하므로, 포클링턴-레머 소수판별법의 기초가 된다.

포클링턴-레머 소수판별법은 ''N''−1을 ''AB'' 꼴로 분해한다(A와 B는 서로소, ''A'' > √''N'', A의 소인수분해를 안다). A의 각 소인수 ''p''에 대해 ''ap''''N''-1≡1 (mod ''N''), gcd(''ap''(''N''-1)/''p''-1, ''N'')=1을 만족하는 ''ap''가 존재하면 ''N''은 소수이다. 브릴하트, 레머, 셀프리지는 A 부분이 (''N''/2)1/3보다 커도 사용 가능한 알고리즘을 개발했다.

타원곡선 소수판별법(ECPP)은 타원곡선을 이용하며, 애트킨과 모레인이 개발했다. 어떤 수가 소수인지 합성수인지를 O((log''n'')5+ε) 시간 안에 판별할 수 있다.

APR 소수판별법은 어떤 수가 소수인지 결정론적으로 확인 가능하며, 개선된 APR-CL 소수판별법은 (log''n'')O(logloglog''n'')시간 안에 확인 가능하다.

AKS 소수판별법은 결정론적이고, 무조건적이며, 모든 자연수에 대해 작동하고, 다항 시간 안에 판별 가능한 유일한 알고리즘이다. 2002년에 발견되었으며, 실행 시간은 O(log6''n'')이다.

가장 간단한 소수 판별법은 나눗셈 시도이다. 입력된 수 ''n''이 주어졌을 때, 2부터 √''n''까지의 소수로 나누어지는지 확인한다. 만약 나누어 떨어진다면, ''n''은 합성수이다. 그렇지 않다면 소수이다.[1] 2와 √''n''사이의 모든 홀수만으로 나누어 떨어지는지 테스트를 하는것으로 최적화 할수 있다. 3보다 큰 모든 소수는 6''k'' + 1 또는 6''k'' + 5 형태를 갖는다는 점을 활용하여 더욱 최적화할 수 있다.

윌슨의 정리를 사용한 방법은 (''p'' - 1)! ≡ -1 (mod ''p'')를 이용하지만, 실용적이지 않다.

20세기 초, 페르마의 소정리의 따름 정리를 소수 판별에 사용할 수 있다는 것이 밝혀졌다.[8] 이로 인해 폭클링턴 소수 판별법이 개발되었다.[9] 사이클로토미 검사는 실행 시간이 O((log ''n'')''c'' log log log ''n'')이다. 타원 곡선 소수 판별법은 해석적 정수론에 대한 몇 가지 추측이 참이라면 O((log ''n'')6)으로 실행된다. 확장된 리만 가설 하에서 밀러 검사는 Õ((log ''n'')4)로 실행된다.[10]

AKS 소수 판별법은 Õ((log ''n'')12)로 실행되며, 소피 제르맹 추측이 참이면 Õ((log ''n'')6)으로 더 줄일 수 있다.[11][12]

루카스 소수 판별법과 프로스 정리는 ''n'' + 1, ''n'' − 1 등의 인수분해를 필요로 한다.

3. 2. 확률론적 소수 판별법

확률론적 소수 판별법은 주어진 수가 소수일 가능성이 높은지 낮은지를 확률적으로 판별하는 알고리즘이다. 이 방법은 결과가 합성수이면 해당 수는 확실히 합성수이지만, 결과가 소수라고 해서 반드시 소수인 것은 아니다. 따라서 결과가 소수로 나오면 그 수는 확률적 소수가 된다.

페르마 소정리를 이용하는 페르마 소수판별법은 a와 p가 서로소이고 aa^{p-1}\equiv1\pmod{p} 식이 성립하는 것을 이용한다. 만약 어떤 자연수 N을 이 식에 대입했을 때 성립하지 않으면 N은 합성수이다.

레온하르트 오일러가 발견한 정리를 이용하는 솔로바이-스트라센 소수판별법은 소수 p와 서로소인 정수 a에 대하여 a^{\frac{p-1}2}\equiv\left ( \frac{a}{p} \right )\pmod{p} 관계식이 성립하는 것을 이용한다. 여기서 오른쪽 기호는 야코비 기호이다.

밀러-라빈 소수판별법은 소수인지 확인하고 싶은 수 N에 대해, N-1을 2^s \cdot d (d는 홀수) 꼴로 분해한다. 만약 어떤 양의 정수 a와 0 \le r \le s - 1인 어떤 r에 대하여 a^d\equiv1\pmod{N} 또는 a^{2^r\cdot d}\equiv-1\pmod{N} 이라면 N은 확률적 소수이다. 일반적으로 밀러-라빈 소수판별법은 솔로바이-스트라센 소수판별법보다 강력하여, 더 효과적으로 합성수를 걸러낼 수 있다. 또한 일반화 리만 가설이 맞다면, \lfloor2(\ln N)^2\rfloor개의 a로 이 소수판별법을 이용했을 때 결과가 모두 소수로 나오면 이 수는 실제로 소수가 된다.

에두아르 뤼카의 이름을 딴 뤼카 소수판별법은, 어떤 수 n과 임의의 정수 P>0, Q, 그리고 D=P^2-4Q\neq0에 대하여 함수 \delta(n)=n-\left ( \frac{D}{n} \right )와 뤼카 수열 U_0=0, U_1=1, U_k=PU_{k-1}-QU_{k-2} 그리고 V_0=2, V_1=P, V_k=PV_{k-1}-QV_{k-2}를 정의한다. 만약 U_{\delta(n)}\equiv0\pmod{n} 관계식이 성립하면, n은 확률적 소수이다.

강한 뤼카 소수판별법은 뤼카 소수판별법을 개량한 것으로, 뤼카 수열과 부등식 0 \le r < s를 만족하는 어떤 r에 대하여, U_d\equiv0\pmod{n} 또는 V_{d\cdot2^r}\equiv0\pmod{n} 이라면 n은 확률적 소수이다. 매우 강한 뤼카 소수판별법은, U_d\equiv0\pmod{n} 그리고 V_d\equiv\pm2\pmod{n} 또는 V_{d\cdot2^r}\equiv0\pmod{n} 중 하나라도 성립하면 n은 확률적 소수이다.

베일리-PSW 소수판별법은 밀러-라빈 소수판별법을 먼저 실행한 후, 강한 뤼카 소수판별법을 이용하여 한 번 더 소수판별법을 실행하고, 추가적인 검사를 한다. 현재까지 264 미만의 수들에 대해 이 소수판별법을 이용했을 경우 실제 결과와 한 번도 틀리지 않아 결정론적 소수판별법이라고 추측되지만, 아직 증명되지는 않았다.

존 셀프리지는 ''p''가 홀수이고, ''p'' ≡ ±2 (mod 5)이면, 2''p''−1 ≡ 1 (mod ''p'')와 ''f''''p''+1 ≡ 0 (mod ''p'') (여기서 ''fk''는 ''k''번째 피보나치 수)가 모두 성립할 경우 ''p''가 소수일 것이라고 추측했다.[2]

확률적 소수 판별법은 여러 번 반복하여 오류 확률을 줄일 수 있다.

4. 각 판별법의 비교

각 소수 판별법은 계산 복잡도, 정확도, 적용 가능 범위 등에서 차이를 보인다.

일반적인 수에 대한 판정법으로는 결정적 소수 판별법과 확률적 소수 판별법이 있다. 결정적 소수 판별법에는 나눗셈 시도, 에라토스테네스의 체, 최대공약수를 이용하는 방법, 윌슨의 정리를 이용하는 방법 등이 있다. 밀러 테스트는 다항 시간 알고리즘이지만, 일반화된 리만 가설(GRH) 하에서 정당성이 증명된다. Adleman–Pomerance–Rumely 소수판별법/Adleman–Pomerance–Rumely primality test영어은 고속이지만 다항 시간 알고리즘은 아니다. ECPP와 AKS 소수 판별법은 다항 시간 알고리즘이다. 확률적 소수 판별법에는 페르마 테스트, 솔로베이-스트라센 테스트, 밀러-라빈 소수 판별법이 있다.

특수한 조건의 수에 대한 판정법으로는 Pocklington의 판정법/Pocklington_primality_test영어 (N = FR+1, F> sqrt(N), F의 소인수 분해가 이미 알려진 경우), 뤼카 테스트 (가 형 소수의 메르센 수에 대한 판정법), 뤼카–레머 테스트 ( 가 홀수 소수의 메르센 수에 대한 판정법), 뤼카–레머–리젤 테스트 등이 있다. 특수한 형태의 수에 대한 판정법으로는 Proth의 판정법/Proth%27s_theorem영어 (프로스 수에 대한 판정법)과 Pépin의 판정법/Pépin%27s_test영어 (페르마 수에 대한 판정법)이 있다.

5. 계산 복잡도 이론

계산 복잡도 이론에서 소수 판별 문제는 PRIMES로 표기되며, 이는 AKS 소수판별법의 등장으로 복잡도 클래스 P에 속하는 것으로 증명되었다.[17] PRIMES는 co-NP에 속하는데, 이는 여집합 문제인 COMPOSITE(어떤 수가 합성수인지 판별하는 문제)가 NP에 속하기 때문이다.[16]

1975년, 바운 프랫은 다항 시간 내에 검증 가능한 소수성 증명서가 존재함을 보여 PRIMES가 NP에 속하며, 따라서 에 속함을 증명했다.[16] 이후 Solovay–Strassen 및 Miller–Rabin 알고리즘의 발견으로 PRIMES는 coRP에 속하게 되었다.[16] 1992년, Adleman–Huang 알고리즘[6]은 복잡도를 로 줄여 프랫의 결과를 대체했다.[16]

1983년의 Adleman–Pomerance–Rumely 소수성 검사는 PRIMES를 '''QP''' (준 다항 시간)에 속하게 했다.[17] 오랫동안 소수성을 다항 시간 내에 해결할 수 있다는 의심이 있었지만 증명되지는 않았으나, AKS 소수판별법의 존재는 PRIMES를 '''P'''에 속하게 했다.[17] 하지만 PRIMES가 P-완전인지 여부는 알려져 있지 않으며, '''P''' 내에 있는 NC 또는 L과 같은 클래스에 속하는지도 알려져 있지 않다. PRIMES가 AC0에 속하지 않는다는 것은 알려져 있다.[15][17]

6. 프로그램 예시

직접 나누기(Trial Division)를 이용한 소수 판별법은 파이썬으로 다음과 같이 구현할 수 있다.

```python

import math

def is_prime(n):

if n <= 1:

return False

if n == 2:

return True

if n % 2 == 0:

return False

for i in range(3, math.ceil(math.sqrt(n)) + 1, 2):

if n % i == 0:

return False

return True

```

이 예시는 입력 n이 소수일 경우 `True`를 반환하고, 그렇지 않을 경우 `False`를 반환한다.

에라토스테네스의 체를 이용한 소수 판별 프로그램은 다음과 같이 파이썬으로 구현할 수 있다.

```python

import math

def eratosthenes(n):

list_prime = list(range(2, n))

for i in range(2, n):

if i in list_prime:

for j in range(i * 2, n, i):

if j in list_prime:

list_prime.remove(j)

if i > int(math.sqrt(n)):

break

return list_prime

```

이 예시는 입력 n까지의 소수 목록을 반환한다.

참조

[1] 서적 Riesel 1994
[2] 문서 John Selfridge#Selfridge's conjecture about primality testing
[3] 논문 The pseudoprimes to 25·109 https://www.math.dar[...] 1980-07
[4] 논문 Lucas Pseudoprimes https://mpqs.free.fr[...] 1980-10
[5] 논문 Strengthening the Baillie-PSW Primality Test 2021-07
[6] 서적 Primality testing and Abelian varieties over finite field Springer-Verlag
[7] arXiv Primality Test Via Quantum Factorization
[8] 논문 The determination of the prime or composite nature of large numbers by Fermat's theorem
[9] 웹사이트 Pocklington's Theorem
[10] 논문 Riemann's Hypothesis and Tests for Primality
[11] 논문 Primes is in P http://annals.math.p[...]
[12] 논문 PRIMES is in P http://www.cse.iitk.[...]
[13] 웹사이트 Primality testing with Gaussian periods http://www.math.dart[...] 2005-07-20
[14] 웹사이트 A note on Agrawal conjecture http://eprint.iacr.o[...] 2008-12-30
[15] 논문 A Lower Bound for Primality https://doi.org/10.1[...] 2001
[16] 서적 Primality testing and Abelian varieties over finite field Springer-Verlag
[17] 간행물 A lower bound for primality



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com