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 }