소수는 항상 사람들을 매료 시켰습니다. 2300 년 전 Euclid는 그의 "요소"에 썼습니다.
소수는 단위로 측정되는 것입니다.
즉 소수는 1
(또는 그 자체로) 나눌 수 있음을 의미합니다 .
사람들은 항상 소수 사이의 관계를 찾아 왔고, ( "흥미로운"과 같이) 아주 이상한 것들을 생각해 냈습니다.
예를 들어, 소피 제르맹 소수는 소수입니다 p
있는 2*p+1
도 소수.
안전 소수는 소수입니다 p
있는 (p-1)/2
정확하게 소피 제르맹 소수의 하위 상태이다, 또한 소수.
이것들은 우리가이 도전에서 찾고있는 것과 관련이 있습니다.
유형 I 의 Cunningham 체인 은 일련의 소수입니다. 여기서 마지막 요소를 제외한 모든 요소는 Sophie Germain 소수 이며 첫 번째 요소를 제외한 모든 요소는 안전한 소수 입니다. 이 체인 의 요소 수를 길이 라고합니다 .
이것은 우리가 소수로 시작 p
하고 계산 한다는 것을 의미합니다 q=2*p+1
. 경우 q
도 소수, 우리는 유형의 Cunnigham 체인이 나는 길이 2. 그런 다음 우리가 테스트 2*q+1
다음 생성 된 번호가 합성 될 때까지, 등등하고있다.
유형 II 의 Cunningham 체인은 거의 동일한 원리에 따라 구성되며, 유일한 차이점은 2*p-1
각 단계에서 확인한다는 것 입니다.
Cunningham 체인의 길이는 1 일 수 있으며 , 이는 2 * p + 1 또는 2 * p-1이 소수가 아님을 의미합니다. 우리는 이것에 관심이 없습니다 .
Cunningham 체인의 일부 예
2
길이가 5 인 I 형 체인을 시작합니다 .
2, 5, 11, 23, 47
다음으로 구성된 숫자는 95
소수가 아닙니다.
이것은 또한 즉, 우리에게 알려줍니다 5
, 11
, 23
및 47
형의 체인을 시작하지 않는 I를 가 선행 요소가 때문에.
2
또한 길이가 3 인 II 형 체인을 시작합니다 .
2, 3, 5
다음은 9
입니다.
11
유형 II를 시도해 보겠습니다 ( 이전 유형 I 에서 제외 ).
글쎄, 21
다음이 될 것입니다. 소수는 아닙니다. 그래서 우리는이 "체인"에 대해 길이 1을 가질 것입니다.
도전
다수 주어진하는 프로그램이나 함수를 작성
n
입력 쓰기 / 복귀로의 시작 번호 n 번째 의 커닝햄 체인 유형 I 또는 II 의 최소 길이는 2 (체인의 형태 다음에 공백이, 시작할 I 또는 II ), 콜론, 해당 체인 유형의 길이가 뒤 따릅니다. 프라임이 두 가지 유형의 체인 (타입 I 및 타입 II)을 시작하는 경우 타입 I 의 체인이 먼저 계산됩니다.예:
2 I:5
이 n
유형은 이전에 시작된 모든 유형의 체인의 일부일 수 있으며,이 경우 해당 유형의 체인의 시작 번호 로 간주해서는 안됩니다 .
이것이 어떻게 시작되는지 봅시다
우리는로 시작합니다 2
. 그것이 첫 번째 소수이기 때문에 우리는를 포함하는 하위 소수로 시작하는 체인이 없다는 것을 확신 할 수 있습니다 2
.
유형 체인의 다음 번호는입니다 2*2+1 == 5
. 5
프라임이므로, 길이 2 이상의 체인이 이미 있습니다.
우리는 그것을 첫 번째 체인으로 간주합니다. 유형 II는 어떻습니까? 다음 숫자는입니다 2*2-1 == 3
. 3
소수이므로 유형 II의 경우 길이 2 이상의 체인도 중요합니다.
우리는 그것을 두 번째 체인으로 간주합니다. 그리고 우리는 끝났습니다 2
.
다음은 3
입니다. 여기에서 낮은 프라임이 시작된 체인에 있는지 확인해야합니다.
유형 I를 확인하십시오 (3-1)/2 == 1
. 1
소수가 아니므로 3은 I 형 체인의 시작점이 될 수 있습니다
. 확인하겠습니다. 다음은 3*2+1 == 7
. 7
소수입니다. 그래서 우리는 적어도 길이 2의 타입 I의 체인을가집니다. 우리는 이것을 세 번째 체인으로 간주합니다.
이제 3
낮은 프라임이 시작된 II 형 체인에 나타나는지 확인합니다 .
(3+1)/2 == 2
. 2
소수이므로 3 은 유형 II 체인의 시작 번호 로 간주 할 수 없습니다 . 따라서이 3
체인 이후의 다음 숫자가 계산 되더라도 계산되지 않습니다.5
, 프라임입니다. (물론 우리는 이미 그것을 알고 있었고, 당신은 물론 이러한 검사를 수행하는 방법에 대한 자신의 방법에 대해 생각할 수 있고 생각해야합니다.)
그리고 우리가에 확인하므로 5
, 7
, 11
우리는 적어도 길이 2의 n 번째 커닝햄 체인을 찾을 때까지 그렇게 계산에.
그런 다음 (또는 어쩌면 조금 전에 ;)
) 찾은 체인의 전체 길이를 결정하고 이전에 언급 한 형식으로 결과를 인쇄해야합니다.
그건 그렇고 : 내 테스트 2
에서 길이가 2보다 큰 두 유형의 체인을 시작한 것 외에는 소수를 발견하지 못했습니다 1
.
입력 / 출력 예
입력
1
산출
2 I:5
입력
10
산출
79 II:3
입력
99
산출
2129 I:2
입력에 대한 출력 1..20
2 I : 5 2 II : 3 3 I : 2 7 II : 2 19 II : 3 29 I : 2 31 II : 2 41 I : 3 53 I : 2 79 II : 3 89 I : 6 97 II : 2 113 I : 2 131 I : 2 139 II : 2 173 I : 2 191 I : 2 199 II : 2 211 II : 2 229 II : 2
처음 5000 개의 출력 목록은 여기 에서 찾을 수 있습니다 .
이것은 코드 골프입니다. 출력에는 임의의 공백이 허용되지만 예제에서 볼 수 있듯이 단일 공백과 콜론으로 유형과 숫자를 구분해야합니다. 허점을 사용하는 것은 허용되지 않습니다. 특히 웹에서 결과를 얻는 것은 허용 되지 않습니다.
행운을 빕니다 :)
:)
2
. 다음은 제거 증명입니다.
2
하고3
있는 유일한 소수입니다p
모두있는2p-1
및2p+1
소수이다, 그래서2
하는 유일한 소수 시작하는 두 종류의 비 사소한 커닝햄 체인.