埃氏筛(朴素筛法求素数):
int prime[N], tot; bool st[N]; // true:not prime, false:is prime void get_primes(int n) { st[1] = true; for(int i = 2; i <= n; i++) { if(!st[i]) { prime[++tot] = i; for(int j = i + i; j <= n; j += i) st[j] = true; } } }
欧拉筛(线性筛法求素数):
int prime[N], tot; bool st[N]; // true:not prime, false:is prime void get_primes(int n) { st[1] = true; for(int i = 2; i <= n; i++) { if(!st[i]) prime[++tot] = i; for(int j = 1; i * prime[j] <= n; j++) { st[i * prime[j]] = true; if(i % prime[j] == 0) break; } } }