뤼카–레머–리젤 소수판별법
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
뤼카–레머–리젤 소수판별법은 에두아르 뤼카가 고안하고 데릭 레머가 개선한 알고리즘으로, 한스 리젤이 더 많은 수에 적용할 수 있도록 확장했다. 이 알고리즘은 주어진 수 N = k ⋅ 2n - 1이 소수인지 판별하는 데 사용되며, 뤼카-레머 검사법과 유사하게 수열의 값을 활용한다. k와 n 값에 따라 초기값을 설정하고, 수열의 값을 계산하여 N이 소수인지 판별한다. LLR 소프트웨어는 이 알고리즘을 실행하는 프로그램으로, 분산 컴퓨팅 프로젝트에서 활용된다.
더 읽어볼만한 페이지
- 소수 판별법 - 에라토스테네스의 체
에라토스테네스의 체는 주어진 범위에서 소수를 효율적으로 찾는 알고리즘으로, 특정 구간 내의 모든 수를 나열한 후 가장 작은 소수의 배수들을 제거하는 과정을 반복하여 소수만을 남기는 방식으로 작동하며, 다양한 변형과 최적화 기법이 존재하고, 의 시간 복잡도를 가진다. - 소수 판별법 - 밀러-라빈 소수판별법
밀러-라빈 소수판별법은 페르마 소정리를 기반으로 주어진 수가 소수인지 판별하는 확률적 알고리즘으로, 합성수를 소수로 잘못 판별할 가능성이 있지만 검사를 반복할수록 정확도가 높아지며, 일반화 리만 가설이 참일 경우 결정론적 알고리즘으로 전환될 수 있다.
| 뤼카–레머–리젤 소수판별법 | |
|---|---|
| 개요 | |
| 목적 | 특정 형태의 숫자가 소수인지 판별 |
| 종류 | 뤼카-레머 소수판별법, 뤼카-레머-리젤 소수판별법 |
| 뤼카-레머-리젤 소수판별법 (Lucas–Lehmer–Riesel test) | |
| 형태 | N = k ⋅ 2ⁿ - 1 |
| 조건 | k < 2ⁿ |
| 관련 항목 | 프로스의 정리 |
| 참고 자료 | |
| 참고 문헌 | John Brillhart, Derrick Henry Lehmer, John Selfridge, New Primality Criteria and Factorizations of 2^m ± 1, Mathematics of Computation, vol. 29, no. 130, pp. 620–647, April 1975 John Brillhart, Derrick Henry Lehmer, John Selfridge, New Primality Criteria and Factorizations of 2^m ± 1, Mathematics of Computation, vol. 29, no. 130, pp. 620–647, April 1975 (무료 액세스) |
2. 역사
뤼카–레머–리젤 소수판별법은 프랑스 수학자 에두아르 뤼카 Édouard Lucas|에두아르 뤼카fra가 처음 고안한 알고리즘에서 시작되었다. 이후 미국의 수학자 데릭 레머 Derrick Henry Lehmer|데릭 헨리 레머eng가 뤼카의 알고리즘을 개선하여 뤼카-레머 소수판별법을 만들었다. 스웨덴의 수학자 한스 리젤 Hans Riesel|한스 리젤swe은 이 뤼카-레머 소수판별법을 더 많은 종류의 수에 적용할 수 있도록 확장하여 현재의 뤼카–레머–리젤 소수판별법을 완성하였다.
뤼카–레머–리젤 소수판별법은 주어진 수 ''N'' = ''k'' ⋅ 2''n'' − 1 (단, ''k'' < 2''n'')이 소수인지 합성수인지를 판별하는 알고리즘이다. 이 방법은 뤼카-레머 소수 판별법과 매우 유사하지만, 사용하는 수열의 초깃값 ''u''0가 ''k''의 값에 따라 달라진다는 점이 특징이다.
3. 알고리즘
알고리즘의 단계는 다음과 같다.
# 판별하려는 수 ''N'' = ''k'' ⋅ 2''n'' − 1 (''k'' < 2''n'')을 정의한다.
# ''k''의 값에 따라 적절한 초깃값 ''u''0를 결정한다.
# 수열 ''u''''i'' 를 다음 점화식을 이용해 ''u''''n''−2까지 계산한다.
#:
# 계산된 ''u''''n''−2 값을 확인하여 ''N''으로 나누어떨어지는지 검사한다.
# 만약 이면, ''N''은 소수이다.
# 그렇지 않으면, ''N''은 합성수이다.
즉, ''N''이 소수일 필요충분 조건은 ''N''이 ''u''''n''−2를 나누는 것이다. 초깃값 ''u''0를 결정하는 구체적인 방법은 ''k''의 값에 따라 달라지며, Rödseth가 제안한 일반적인 방법도 존재한다.[2][3]
3. 1. 초깃값 설정
뤼카–레머–리젤 소수판별법은 주어진 수 N = ''k'' ⋅ 2''n'' − 1 (단, ''k'' < 2''n'')의 소수 여부를 판별하는 알고리즘이다. 이 판별법은 뤼카-레머 소수판별법과 기본적인 구조는 유사하지만, 사용하는 수열의 초깃값 ''u''0가 ''k''의 값에 따라 달라지는 점이 특징이다.
먼저 수열 ''u''''i''를 다음과 같은 점화식으로 정의한다.
:
이때 N이 소수일 필요충분 조건은 ''u''''n''−2가 N으로 나누어떨어지는 것, 즉 을 만족하는 것이다. 만약 이 조건을 만족하면 N은 소수이고, 그렇지 않으면 N은 합성수이다.
초깃값 ''u''0는 ''k''와 ''n''의 값에 따라 다음과 같이 결정된다.
:
:
이 초깃값 ''u''0를 결정하는 과정은 전체 소수판별 과정에 비해 시간이 적게 소요된다.
3. 2. 수열 계산
수열 {''ui''}는 다음과 같이 점화식으로 정의한다. 초기값 ''u''0는 아래 방법으로 결정하고, 음이 아닌 정수 ''i'' ≥ 0에 대해 다음 식을 만족한다.
''N'' = ''k'' ⋅ 2''n'' − 1 (단, ''k'' < 2''n'') 형태의 수가 소수인지 판별할 때, ''N''이 소수일 필요충분 조건은 ''N''이 ''u''''n''−2를 나누는 것이다. 즉, 이면 ''N''은 소수이고, 그렇지 않으면 합성수이다.
이 알고리즘은 뤼카-레머 소수 판별법과 매우 유사하지만, 수열 {''ui''}의 초깃값 ''u''0가 ''k''의 값에 따라 달라진다는 차이점이 있다. 초깃값 ''u''0는 ''k''의 값에 따라 다음과 같이 결정된다.
이는 ''k''=1일 때 뤼카-레머 소수 판별법과 동일해진다.
일반적으로 몇 개의 작은 ''P'' 값(예: 5, 8, 9, 11)을 시도하면 금방 찾을 수 있다. ''P'' 값을 찾으면, 루카스 수열 Vk(''P'',1)을 이용하여 초깃값을 계산한다.[2][3]
만약 ''k''가 3의 배수가 아니라면, ''P''=4를 사용하면 되므로 별도의 탐색 과정이 필요 없다.[3]
3. 3. 소수 판별
판별하려는 수 을 (단, ) 형태로 둔다.
그 다음, 수열 를 다음과 같이 정의한다.
초깃값 는 의 값에 따라 결정되며(구체적인 방법은 다음 절에서 설명한다), 음이 아닌 정수 에 대해 점화식을
:
로 정한다.
이때, 이 소수일 필요충분 조건은 이 를 나누는 것이다. 즉, 이 성립하면 은 소수이고, 그렇지 않으면 합성수이다.
이 알고리즘은 뤼카-레머 소수 판별법과 매우 유사하지만, 사용하는 수열 의 초깃값 가 값에 따라 달라진다는 점이 다르다.
4. 알고리즘 작동 원리
뤼카-레머-리젤 소수 판별법은 군론을 이용한 소수 판별법의 한 종류이다. 어떤 정수 ''N''이 소수인지 판별하기 위해, ''N''을 법으로 하는 2차 확대의 승법군을 활용한다. 만약 ''N''이 소수라면, 이 승법군의 위수는 ''N''2 − 1이 된다. 중요한 점은 이 군이 위수가 ''N'' + 1인 부분군을 가지며, 이 부분군의 생성원을 찾는 것이 판별법의 핵심이다.[2][3]
이 알고리즘은 뤼카-레머 소수 판별법과 매우 유사하지만, 판별하려는 수 ''N'' = ''k'' ⋅ 2''n'' − 1의 형태에서 ''k'' 값에 따라 계산 시작점이 달라진다는 특징이 있다. 알고리즘은 다음과 같이 정의된 수열 ''u''''i''를 사용한다. 모든 ''i'' > 0에 대해:
:
이 점화식을 만족하는 수열 ''u''''i''는 뤼카 수열과 밀접한 관련이 있다. 뤼카-레머 판별법에서처럼 형태로 생각할 수 있으며, 이는 수열 의 2''i''번째 항에 해당한다. 여기서 ''a''는 특정 이차 방정식의 근이며, 수열 ''w''''i''는 뤼카 수열의 점화식 를 만족한다. 실제로는 ''k'' ⋅ 2''i''번째 항을 다루게 되는데, 뤼카 수열에서 ''k''번째 항마다 추출한 부분 수열(즉, 0번째 항부터 시작하여 매 ''k''번째 항을 취하는 것) 역시 뤼카 수열이므로, 적절한 시작 값 ''u''0를 선택함으로써 계수 ''k''의 영향을 반영할 수 있다.
''N'' = ''k'' ⋅ 2''n'' − 1 (단, ''k'' < 2''n'') 형태의 수가 주어졌을 때, ''N''이 소수일 필요충분조건은 위에서 정의된 수열의 ''n'' − 2번째 항인 ''u''''n''−2가 ''N''으로 나누어떨어지는 것이다. 즉, 이 성립하는지 확인한다.
시작 값 ''u''0는 ''k''의 값에 따라 결정된다.
- 만약 ''k'' ≡ 1 또는 5 (mod 6)이고 특정 조건을 만족하지 않으면(예: 3이 ''N''을 나누지 않는 경우), 뤼카 V(4,1) 수열의 ''k''번째 항을 ''u''0로 사용할 수 있다. 이는 일반적인 뤼카-레머 소수 판별법의 일반화로 볼 수 있다.
- ''k''가 3의 배수인 경우 등 다른 경우에는 시작 값을 찾는 것이 더 복잡하다. Rödseth가 제안한 대안적인 방법[2]은 야코비 기호를 이용하여 특정 조건을 만족하는 ''P'' 값을 찾는 것이다.
:
이러한 ''P'' 값을 찾은 후(보통 5, 8, 9, 11 중 하나가 빠르게 찾아진다), 뤼카 수열 ''V''''k''(''P'',1)을 계산하여 ''u''0 (mod ''N'')를 결정한다.[3] 이 시작 값 선택 과정은 주 판별 과정에 비해 시간이 거의 소요되지 않는다.
5. 예시
이 섹션에서는 뤼카–레머–리젤 소수판별법을 사용하여 특정 수가 소수인지 합성수인지 판별하는 구체적인 예를 살펴본다. 아래 하위 섹션에서는 47과 2303을 예로 들어 판별 과정을 자세히 설명한다.
이 판별법은 47이나 2303과 같이 상대적으로 작은 수에 대해서는 직접 나누어 보거나 페르마 소수판별법 등 다른 방법이 더 효율적일 수 있다. 하지만 판별하려는 수가 매우 커지면(예: 1000만 자리 이상) 뤼카–레머–리젤 소수판별법의 효율성이 다른 소수판별법들을 크게 앞서기 때문에 주로 사용된다.
5. 1. 47은 소수
47은 뤼카–레머–리젤 소수판별법을 적용할 수 있는 k · 2n - 1 형태로 나타낼 수 있다. 47 = 3 × 24 - 1 이므로, k=3이고 n=4이다. 판별법 적용 조건인 k < 2n (3 < 16)을 만족한다.k=3일 때, 판별법에 따른 초깃값 s0는 5778이다. 이 값을 N=47에 대해 모듈러 연산을 적용하면 다음과 같다.
다음으로, 수열의 점화식 si ≡ si-12 - 2 (mod N)에 따라 sn-2 = s4-2 = s2까지 계산한다.
계산 결과 sn-2 = s2 ≡ 0 (mod 47)이므로, 뤼카–레머–리젤 소수판별법에 따라 47은 소수이다.
5. 2. 2303은 합성수
2303 = 9 ⋅ 28 - 1이므로 k=9, n=8이다. 여기서 9 < 28 = 256 이므로 판별법 적용 조건을 만족한다.먼저 초깃값 s0 = Vk (mod 2303)을 구해야 한다. k=9인 경우, 특정 조건을 만족하는 P 값을 찾아야 하며, 이 예시에서는 P=8을 사용한다. Vk는 다음 점화식을 이용하여 계산할 수 있다.
k=9를 이진수로 표현하면 1001(2)이다. V0=2, V1=P=8부터 시작하여 V9를 계산한다.
- V0 = 2, V1 = 8
- 1001(2): 첫 비트(1)는 시작을 의미한다.
- 001(2): 다음 비트가 0이므로 공식을 사용한다.
- 다음 계산을 위해 V3도 구한다:
- 01(2): 다음 비트가 0이므로 공식을 사용한다.
- 다음 계산을 위해 V5도 구한다:
- 1(2): 마지막 비트가 1이므로 공식을 사용한다.
- 이므로, 이다.
- (원본 소스의 계산 결과는 이며, 여기서는 원본 소스 결과를 따른다.)
따라서 초깃값 이다.
이제 수열 si를 점화식에 따라 계산한다. 목표는 sn-2 = s6를 구하는 것이다.
계산 결과 이다. 이 값이 0이 아니므로, 뤼카–레머–리젤 소수판별법에 따라 2303은 합성수이다. 실제로 2303은 72 ⋅ 47로 소인수분해된다.
6. LLR 소프트웨어
LLR은 뤼카–레머–리젤 소수판별법(LLR) 테스트를 실행할 수 있는 프로그램이다.[4] 이 프로그램은 장 펜네(Jean Penné)가 개발했으며, 뱅상 펜네(Vincent Penné)는 인터넷을 통해 테스트를 수행할 수 있도록 프로그램을 수정했다.[4] 이 소프트웨어는 개인적으로 소수를 탐색하는 사람들과 분산 컴퓨팅 프로젝트 모두에서 사용된다. 대표적인 분산 컴퓨팅 프로젝트로는 리젤 체와 프라임 그리드가 있다.[4]
2020년에는 개정된 버전인 LLR2[5]가 배포되었다.[6] 이 버전은 전체적인 이중 확인 과정 없이도 계산 결과를 검증할 수 있는 "작업 증명" 인증서를 생성하는 특징이 있다.
이후 추가적인 업데이트로 PRST[7]가 개발되었다. PRST는 검증에는 더 많은 시간이 걸리지만, 일부 특정 형태의 소수에 대해서는 더 빠르게 인증서를 생성할 수 있는 대체 인증 방식을 사용한다.[8][9]
참조
[1]
논문
New Primality Criteria and Factorizations of 2^m ± 1
1975-04
[2]
논문
A note on primality tests for N=h·2^n−1
http://folk.uib.no/n[...]
1994
[3]
서적
Prime Numbers and Computer Methods for Factorization
Birkhäuser
[4]
웹사이트
LLRnet supports LLR V3.8! (LLRnet2010 V0.73L)
https://mersenneforu[...]
2021-11-17
[5]
웹사이트
LLR2 GitHub
https://github.com/p[...]
2023-11-23
[6]
웹사이트
LLR2 installed on all big LLR projects
https://www.primegri[...]
2023-11-23
[7]
웹사이트
PRST GitHub
https://github.com/p[...]
2023-11-23
[8]
간행물
An Efficient Modular Exponentiation Proof Scheme
2022-09-16
[9]
웹사이트
SR5 project switched to PRST
https://www.primegri[...]
2023-11-23
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com