素数的一般筛法和快速线性筛法

Posted xiaohanghuo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了素数的一般筛法和快速线性筛法相关的知识,希望对你有一定的参考价值。

一般筛法:

1 void prime() 
2     memset(vis, true, sizeof(vis));
3     vis[0] = vis[1] = false;
4     for (int i = 2; i < maxn; i++) 
5         for (int j = 2; i * j < maxn; j++) 
6             vis[i * j] = false;
7         
8     
9 

快速线性筛法:

 1 int prime[N] = 0 2 bool isNotPrime[N] = 1, 1;   
 3 int num_prime = 0;  
 4 
 5 void quick_prime() 
 6      
 7          for(int i = 2 ; i < N ; i ++)       
 8                        
 9         if(! isNotPrime[i]) //i是合数的话,i = p1 * p2 * p3 * ···              
10              prime[num_prime ++] = i;    
11         for(int j = 0 ; j < num_prime && i * prime[j] <  N ; j ++)
12                            
13                   isNotPrime[i * prime[j]] = 1;  
14               if( !(i % prime[j] ) ) // 当p1 == prime[j]时,筛除终止。筛出不大于p1的素数*i           
15                 break;           
16                 
17             
18   

 

以上是关于素数的一般筛法和快速线性筛法的主要内容,如果未能解决你的问题,请参考以下文章

转载一般筛法求素数+快速线性筛法求素数

线性筛法

数学基础素数线性筛法--欧拉筛法模板普通筛法的优化

线性筛法(欧拉筛法)求素数

数学数论素数的线性筛法

线性筛法