阿特金的筛子

时间:2013-10-15 18:08:33

标签: algorithm math language-agnostic primes sieve-of-atkin

我一直在尝试学习生成素数的算法,我在维基百科上遇到了阿特金的Sieve。我理解算法的几乎所有部分,除了一些。以下是问题:

  1. 下面的三个二次方程如何形成? 4x ^ 2 + y ^ 2,3x ^ 2 + y ^ 2和3x ^ 2-y2
  2. 维基百科中的算法讨论模数为60但我不明白在下面的psudocode中使用的方式/位置。
  3. 这些提醒1,5,7和11如何找到?
  4. 以下是来自维基百科的伪代码供参考:

    // arbitrary search limit                                                   
    limit ← 1000000                                                             
    
    // initialize the sieve                                                     
    for i in [5, limit]: is_prime(i) ← false                                    
    
    // put in candidate primes:                                                 
    // integers which have an odd number of                                     
    // representations by certain quadratic forms                               
    for (x, y) in [1, √limit] × [1, √limit]:                                    
        n ← 4x²+y²                                                              
        if (n ≤ limit) and (n mod 12 = 1 or n mod 12 = 5):                      
            is_prime(n) ← ¬is_prime(n)                                          
        n ← 3x²+y²                                                              
        if (n ≤ limit) and (n mod 12 = 7):                                      
            is_prime(n) ← ¬is_prime(n)                                          
        n ← 3x²-y²                                                              
        if (x > y) and (n ≤ limit) and (n mod 12 = 11):                         
            is_prime(n) ← ¬is_prime(n)                                          
    
    // eliminate composites by sieving                                          
    for n in [5, √limit]:                                                       
        if is_prime(n):                                                         
            // n is prime, omit multiples of its square; this is                
            // sufficient because composites which managed to get               
            // on the list cannot be square-free                                
            is_prime(k) ← false, k ∈ {n², 2n², 3n², ..., limit}                 
    
    print 2, 3                                                                  
    for n in [5, limit]:                                                        
        if is_prime(n): print n  
    

0 个答案:

没有答案