Usually sieve method primes fast linear sieve

General sieve method:

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 }

Fast linear sieve method:

 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 Prime && * I [J] <N; J ++ )
 12 is              {               
 13 is                    isNotPrime [Prime * I [J]] = . 1 ;  
 14                IF ((% I! ) Prime [J]) when // when p1 == prime [j], screening terminated. Sieve primes p1 is no greater than I *           
 15                  BREAK ;           
 16          }        
 . 17      }        
 18 is }  

 

Guess you like

Origin www.cnblogs.com/xiaohanghuo/p/11621461.html