质数筛模板
埃氏筛理解与代码模板
#include <iostream> #include <cstring> using namespace std; const int N = 10010; bool isprime[N]; int n, prime[N], tot; int Era_prime(int n) { tot = 0; memset(isprime, true, sizeof(isprime)); isprime[0] = false; isprime[1] = false; for(int i = 2; i <= n; i++) { if(isprime[i]) { prime[tot++] = i; for(int j = i * 2; j <= n; j += i) { isprime[j] = false; } } } return tot; } int main() { cin >> n; cout << "n以内的共有多少质数:" << Era_prime(n) << endl; for(int i = 0; i < tot; i++) { cout << prime[i] << " "; } return 0; }
线性筛
#include <iostream> #include <cstring> using namespace std; const int N = 10010000; bool isprime[N]; int prime[N]; void Prime(int x) { int t = 0; memset(isprime, true, sizeof(isprime)); isprime[0] = false; isprime[1] = false; for(int i = 2; i <= x; i++) { if(isprime[i]) { prime[t++] = i; } for(int j = 0; j < t && prime[j] * i <= x; j++) { isprime[prime[j] * i] = false; if(i % prime[j] == 0) { break; } } } } int main() { int a, b; Prime(N); scanf("%d%d", &a, &b); for(int i = a; i <= b; i++) { if(isprime[i]) { printf("%d\n", i); } } return 0; }