프리차드의 체

Sieve of Pritchard
프리차드의 체: 최대 150의 소수점 알고리즘 단계

수학에서, 프리차드의 체는 지정된 한계까지 모든 소수를 찾는 알고리즘이다.에라토스테네스의 고대 체처럼, 그것은 숫자 [1]이론의 단순한 개념적 기초를 가지고 있다.특히 작은 경계를 위한 빠른 손 계산에 적합합니다.

에라토스테네스의 체는 각각의 소수에 대해 각각의 비소수를 구분하는 반면, 프리차드의 체는 지금까지 처리된 소수에 의해 나누어지지 않는 숫자의 패턴을 나타내는 점진적으로 더 큰 바퀴를 구축함으로써 거의 모든 비소수를 고려하는 것을 피한다.따라서 더 나은 점근적 복잡성을 달성했고, 지정된 경계에서 실행 시간이 준선형인 첫 번째 체였다.점근적 실행 시간은 개선되지 않았으며, 다른 알려진 체보다 적은 수의 컴포지트를 삭제합니다.그것은 1979년에 Paul Pritchard에 [2]의해 만들어졌습니다.

프리차드는 소수를 [3][4][5]찾기 위한 다른 많은 체 알고리즘을 만들어 왔기 때문에 프리차드의 체는 때때로 (프리차드[1] 본인에 의해) 체 또는 다이내믹[6]불리기도 한다.

개요

소수 11)과 그 자신 외에는 자연수가 없는 자연수입니다.

지정된 N N 이하의 모든 소수점을 찾기 위해 체 알고리즘은 2, , (\2, 3, 의 후보 집합을 검사하고 소수점이 아닌 후보를 삭제하고 마지막에는 소수점을 남깁니다.Eratostenes의 체는 모든 범위를 검사합니다. 먼저 첫 번째 2디스플레이 2)의 배수를 모두 제거한 다음 다음 다음 3(스타일 3의 배수를 제거합니다.대신 프리차드의 체는 에라토스테네스의 체에 의해 각각의 연속된 소수가 처리된 후에 남은 숫자의 패턴을 나타내는 연속된 바퀴에서 발생하는 숫자로 구성된 범위의 부분 집합을 조사합니다.

i> { i > 에서는 i { i} 의 「th i} 」는 이 패턴을 나타냅니다.11)과 、 . p i p _ { i = _ {1} * p {2* 의 숫자 집합입니다. 소수(및 관련된 })를 가집니다).이는 숫자에 스타일 })를 더해도 첫 i i 소수 중 하나로 나눌 수 있는지 여부에 관계없이 변경되지 않기 때문입니다. 나머지 소수 중 하나로 나눌 수 있는 나머지는 변경되지 않기 때문입니다.

길이 { 1 { { W _ { 1 { P _ { }= { 1, 5 } { \ { 1 \ } { = 6 = { 2 } { 2 } = { } } } } so so so so so so so so so so so so so so so so so so so so so so so so so; so so;; so so so3)휠은 Wi( 원형으로 시각화할 수 있으며, 그 부재는 원점으로부터 대응하는 거리에 표시되어 있기 에 이러한 이름이 붙습니다.그런 다음 숫자 선을 따라 바퀴를 굴리면 연속된 숫자에 해당하는 포인트가 첫 ii 소수 중 하나로 나누어지지 않습니다.애니메이션에서는 W_ 30까지 롤업되어 .

두 번째 바퀴를 30까지 굴려라.

n n(\ n으로 한 결과로 n>0(\n> 하면 편리합니다.그런 다음 에서 {,, , W_=\{, 7,됩니다 - 25

→ - [1] - [보기] - [1] - [1] - [+1] - [1] - [1] - [1] - [1] - [1] - [1] - p + 1 휠의 11)이고 ( 자연수를 나타냄) 1({i에도 사용할 수 있습니다.따라서 프리차드의 체는 작은 휠 W_})에서 시작하여 1디스플레이 1) 휠의 첫 번째 멤버의 제곱이 N({ 스타일N이 될 때까지 연속되는 휠을 만듭니다. 휠은 매우 빠르게 성장하지만N({ 스타일N})까지 값이 필요합니다..

다음 휠을 생성하는 방법을 찾아야 합니다.애니메이션에서 3 {,5, -{ 1, 5 5 5 5 { W_} ,25, W를 하여 얻을 수 W:{n1}: W): {n1}: W+1 ={n1}: W +1 ={n1}: (를) (를) = #{n1}).네. P_ 만 더하기 때문에 먼저 w 부터 시작하는 각 후속 부재에 하고 그 결과를 세트에 삽입하여 현재 휠을 확장합니다.그런 + 1 배수가 삭제됩니다. + 1 하는 숫자가 삭제되지 않도록 주의해야 합니다.처음에 제시된[2] Pritchard의 체는 처음에 필요한 최대 멤버를 찾을 때까지 연속 멤버를 건너뛰고, 그 다음 세트를 다시 처리하여 역순으로 삭제를 수행합니다.위의 첫 번째 애니메이션에서 사용한 방법입니다.보다 간단한 방법은 +(\ 목록으로 수집한 후 [7]삭제하는 것입니다.또 다른 접근방식은 Gries와 Misra에 [8]의해 제공됩니다.

메인 루프가 N N보다 작은 휠로 끝나는 경우, 나머지 소수점을 생성하기 위해 메인 가 N디스플레이 N까지 연장됩니다.

따라서 N까지의 모든 소수를 찾는 알고리즘은 다음과 같습니다.

  1. 휠 0을 나타내는 W={1} 및 길이=1 집합prime p=2로 시작합니다.
  2. p <= N이면 다음2 수행합니다.
    1. 길이 < N이면
      1. p*길이 또는 N을 초과하지 않는 한 W의 연속적부재 W를 1로 시작하고 W에 길이 + w삽입하여 W를 확장한다.
      2. 길이를 p*length N의 최소값으로 늘립니다.
    2. 먼저 가장 큰 <= 길이를 찾은 다음 뒤로 작업하여 p x W의 각 멤버를 반복해서 삭제합니다.
    3. 소수 p를 기록한 다음 p를 1 다음에 W의 다음 멤버로 설정합니다(또는 p가 2이면 3).
  3. 길이 < N경우 W의 연속 부재 w를 1부터 시작하여 W에 길이 + w삽입하는 것을 반복하여 W를 N까지 확장합니다.
  4. 종료 시 N까지의 나머지 소수는 1 이후의 W 멤버입니다.

150 이하의 모든 소수를 찾으려면 다음과 같이 진행하십시오.

길이가 1인 휠 0부터 시작하여 모든 자연수 1, 2, 3을 나타냅니다.:

  1 

휠 0(롤링 시)에 대한 1 뒤의 첫 번째 숫자는 2입니다. 소수점으로서 주목하십시오.이제 먼저 휠 0을 최대 2까지 연장한 다음 휠 0의 각 숫자를 2배씩 삭제하여 길이가 2x1=2인 휠 1을 형성하면 다음과 같이 됩니다.

  1 2 

휠 1(롤링된 경우)의 경우 1 뒤에 있는 첫 번째 숫자는 3입니다. 소수점인 점에 유의하십시오.이제 먼저 휠 1을 최대 6까지 연장한 다음 휠 1의 각 숫자를 3번 삭제하여 길이가 3x2=6인 휠 2를 형성합니다.

  1 2 3 5 

휠 2의 경우 1 뒤에 오는 첫 번째 숫자는 5입니다. 소수점이라고 합니다.이제 먼저 휠 2를 30까지 연장한 다음 휠 2의 각 숫자를 5배씩 삭제(역순으로!)하여 길이가 5x6=30인 휠 3을 형성하십시오.

  1 2 3 5 7 11 13 17 19 23 25 29 

휠 3의 경우 1 뒤에 오는 첫 번째 숫자는 7입니다. 소수점이라고 합니다.현재 4번 바퀴의 길이는 7x30=210이므로 3번 바퀴는 제한치인 150까지만 연장합니다.(한도에 도달한 이상 연장하지 않습니다.)그런 다음 제한 값 150을 초과할 때까지 3번 휠의 각 숫자를 7번 삭제하여 4번 휠의 요소를 최대 150까지 가져옵니다.

  1 2 3 5 7 11 13 19 23 25 29 37 41 47 49 53 59 61 67 7 7 7 7 77 89 91 103 103 103 101 113 121 131 133 139 149 

이 부분 휠 4의 경우 1보다 뒤의 첫 번째 숫자는 11입니다. 소수점인 점에 유의하십시오.롤링 작업이 끝났기 때문에 제한치 150을 초과할 때까지 부분 휠 4의 각 숫자를 11배 삭제하여 휠 5의 요소를 최대 150으로 만듭니다.

  1 2 3 5 7 11 13 19 23 25 29 37 41 47 49 53 59 61 67 7 7 7 7 77 89 91 103 103 103 101 113 121 131 133 139 149 

이 부분 휠 5의 1 뒤의 첫 번째 숫자는 13입니다.13의 제곱이 최소 한계치 150이기 때문에, 우리는 멈춥니다.나머지 수(1개 제외)는 한도 150까지 나머지 소수입니다.

8개의 컴포지트 번호만 하나씩 삭제됩니다.(1을 제외한) 나머지 숫자는 소수이다.이에 비해 Eratostenes의 자연판 체(같은 지점에서 정지)는 합성수를 184회 제거한다.

유사 코드

프리차드의 체는 다음과 [1]같이 의사 코드로 나타낼 수 있습니다.

알고리즘은 입력: = 2, = 2, = 2, = {Num}, =, minimum값, w 값 {n1}, {\ - 1 - k - pk -k, N.Pr = 최대 소수점k 반면2 (길이 < N)은 W연장한 다음 최소 p*길이, N연장한 경우 p의 배수를 W에서 삭제하고, Pr; k, p:= k+1, nextW, 1)를 삽입한 후 W연장하여 PR, 길이N으로 되돌립니다.

여기서 next(W, w)는 순서 집합 W의 w 다음 값입니다.

절차 확장 W,length to n은 {in: W = Wk and length = Pk and n > length} {out: W = Wk  \} n 및 length = n 정수 w, x : = 1, length + 1; 반면 x < n do W = W > n > n 、 n 、 n 、 n 、 n 、 n ; n 、 next 、 n ; n ; n 、 n 、 n 、 n ; n 、 n 。
순서 p배수를 W에서 삭제합니다.length정수 w; w : = p; p*w < = lengthw : = next ( W , w ); w >1은 w : = prev ( W , w );W 에서 p*w삭제합니다;

여기서 prev(W, w)는 순서 집합 W에서 w보다 앞의 값입니다.알고리즘은 k = 0일다음(W,1)을 특수 케이스로 만드는 사소한 복잡성 때문에 W W_1})이 0({})으로 초기화할 수 있습니다.

이 추상 알고리즘에서는 최대값보다 큰 값 삽입, 멤버 삭제, 멤버 다음에 다음 값 가져오기, 멤버 앞에 이전 값 가져오기 작업을 지원하는 순서 집합을 사용합니다.Mertens의 정리 중 하나(3번째)를 사용하면O (/ log logN) (\ [2]\ N 하고 있음을 알 수 있습니다.

실행

배열 기반의 이중 링크 리스트 s를 사용하여 순서 집합 W를 실행하고, 다음으로 기억되는 s[w]와 prev(W,w)를 기억하는 s[w-1]를 실행할 수 있다.이것에 의해, 각 추상적인 조작을 소수의 조작으로 실장할 수 있습니다.(어레이는 세트 Pr을 "공짜"로 저장하는데도 사용할 수 있습니다.)따라서 랜덤 액세스머신 모델에서 최대의 소수(\N 계산하기 위한 Pritchard 체의 시간 복잡도/ log logN O \ 입니다매우 작은 곱셈 [2]테이블을 사용하여 네이트되므로 비트의 복잡도는 O logN / N O N \ N비트 입니다.

같은 모델에서 공간의 복잡도는 O Odisplaystyle O(N)}워드, 즉 O log O N 입니다.Eratostenes의 체는 2 ~ N 범위의 후보별로 1비트만 필요하므로 공간 복잡도는 O O 낮습니다.소수에 필요한 공간은 계산되지 않습니다.소수가 발견되면 외부 스토리지에 인쇄하거나 쓸 수 있기 때문입니다.프리차드는[2] 서브선형 시간 복잡도에 영향을 주지 않고 O / N ){ Olog \ N 필요로 하는 체의 변형을 제시하여 시간과 공간 모두에서 Eratostes의 체의 자연 버전보다 점근적으로 우수하다.

그러나 Eratostes의 체는 자연수의 [9]연속적인 세그먼트를 조작함으로써 훨씬 적은 메모리를 요구하도록 최적화할 수 있다.Its space complexity can be reduced to bits without increasing its time complexity[3] This means that in practice it can be used for much larger limits than would otherwise fit in memory, and also take advantage of fast cache memory.또한 최대 속도를 위해 처음 몇 개의 소수점과의 체를 피하기 위해 작은 휠을 사용하여 최적화된다(이것이 점근적 시간 복잡성을 바꾸지는 않는다).따라서 프리차드의 체는 충분히 넓은 범위에 걸쳐 실용적인 체로서 경쟁력이 없다.

기하학적 모형

W_까지 연속 휠 생성

프리차드 체의 중심에는 연속 바퀴를 만드는 알고리즘이 있습니다.다음과 같은 단순한 기하학적 모델이 있습니다.

  1. 원주 1의 원주 1부터 시작합니다.
  2. 다음 휠을 생성하려면:
    1. 바퀴를 돌려서 1시 뒤의 첫 번째 표시(거리)를 찾아 p라고 합니다.
    2. 현재 휠의 원주에 p를 곱한 새 원을 만듭니다.
    3. 현재 휠을 새 원 둘레에 굴려 표시가 닿는 곳에 표시합니다.
    4. 현재 휠을 p만큼 확대하여 일치하는 표시를 제거하십시오.

처음 두 번의 반복에서는 다시 1에 도달할 때까지 원을 계속 돌아야 합니다.

첫 번째 원은 W { {\}=\{을(를) , 되는 원은 ,W2, },를 나타냅니다.오른쪽 애니메이션은 이 모델이 최대 까지 하는 것을 나타냅니다.

바퀴가 대칭임을 모형에서 알 수 있다.는 ww가 분할할 수 없는 에만 Pk-의 소수 중 하나로 분할할 수 때문입니다.이를 이용하여 일부 컴포지트 처리를 회피할 수 있지만 보다 복잡한 알고리즘이 필요합니다.

관련 체

프리차드의 체에 있는 바퀴가 최대 크기에 도달하면, 나머지 동작은 오일러 에 의해 수행되는 동작과 동일합니다.

프리차드의 체는 선별 과정을 가속화하는 데 사용되는 동적 휠과 주요 후보 세트를 혼합하는 데 있어 독특합니다.그러나 별도의 정적 휠(Eratostenes의 체 속도를 높이기 위해 자주 사용됨)은 O logN)(\log N 를 후자 또는 선형 체로높일 수 있습니다(N(\ N의 함수로서).예를 들어 N g N({})을 않는 가장 큰 길이의 휠을 사용합니다.( {N개의 추가가 필요하고 log log N { O { \ N 한 Eratostenes의 체 버전을 가져오려면N}, 선형 서브킨에서 자연스럽게 선형 Get하기 위해서는 N의 속도를 높여야 합니다

벵골(10](10]를 원활하게 실행할 수 있으며, 현재 경계선을 사용하여 현재 경계선을 증가시키기 위해 선형적으로 작동시키는 동안 동적 휠을 형성할 수 있다. - 아니, 아니에요! - 왜요?사용.프리차드는[5] 곱셈을 피하는 방법을 보여줌으로써 프리차드의 체와 동일한 점근 비트 복잡도를 얻었다.

Runciman은 프리차드의 체에서 영감을 얻은 함수 알고리즘을[11] 제공합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b c d e Pritchard, Paul (1982). "Explaining the Wheel Sieve". Acta Informatica. 17 (4): 477–485. doi:10.1007/BF00264164. S2CID 122592488.
  2. ^ a b c d e Pritchard, Paul (1981). "A Sublinear Additive Sieve for Finding Prime Numbers". Communications of the ACM. 24 (1): 18–23. doi:10.1145/358527.358540. S2CID 16526704.
  3. ^ a b c Pritchard, Paul (1983). "Fast Compact Prime Number Sieves (Among Others)". Journal of Algorithms. 4 (4): 332–344. doi:10.1016/0196-6774(83)90014-7. hdl:1813/6313. S2CID 1068851.
  4. ^ Pritchard, Paul (1987). "Linear prime-number sieves: A family tree". Science of Computer Programming. 9 (1): 17–35. doi:10.1016/0167-6423(87)90024-4. S2CID 44111749.
  5. ^ a b Pritchard, Paul (1994). "Improved Incremental Prime Number Sieves". Lecture Notes in Computer Science. 877: 280–288. CiteSeerX 10.1.1.52.835. doi:10.1007/3-540-09745-7_5. S2CID 9214019.
  6. ^ Dunten, Brian; Jones, Julie; Sorenson, Jonathan (1996). "A Space-Efficient Fast Prime Number Sieve". Information Processing Letters. 59 (2): 79–84. CiteSeerX 10.1.1.31.3936. doi:10.1016/0020-0190(96)00099-3. S2CID 9385950.
  7. ^ Mairson, Harry G. (1977). "Some new upper bounds on the generation of prime numbers". Communications of the ACM. 20 (9): 664–669. doi:10.1145/359810.359838. S2CID 20118576.
  8. ^ Gries, David; Misra, Jayadev (1978). "A linear sieve algorithm for finding prime numbers". Communications of the ACM. 21 (12): 999–1003. doi:10.1145/359657.359660. hdl:1813/6407. S2CID 11990373.
  9. ^ Bays, Carter; Hudson, Richard H. (1977). "The segmented sieve of Eratosthenes and primes in arithmetic progressions to 1012". BIT. 17 (2): 121–127. doi:10.1007/BF01932283. S2CID 122592488.
  10. ^ Bengelloun, S. A. (2004). "An incremental primal sieve". Acta Informatica. 23 (2): 119–125. doi:10.1007/BF00289493. S2CID 20118576.
  11. ^ Runciman, C. (1997). "Lazy Wheel Sieves and Spirals of Primes" (PDF). Journal of Functional Programming. 7 (2): 219–225. doi:10.1017/S0956796897002670. S2CID 2422563.