//模板一 #include<iostream> #include <stdio.h> using namespace std; const long N = 10000001; long prime[N] = {0}, num_prime = 0; int isNotPrime[N] = {1, 1}; int main() { for(long i = 2 ; i < N ; i ++) { if(! isNotPrime[i]) prime[num_prime ++] = i; //关键处1 for(long j = 0 ; j < num_prime && i * prime[j] < N ; j ++) { isNotPrime[i * prime[j]] = 1; if(!(i % prime[j])) //关键处2 break; } } for(long i = 2 ; i <100 ; i ++) printf("%ld\n",prime[i]); return 0; } //模板二 #include<stdio.h> #include<math.h> #define N 10000001 bool prime[N]; int main() { int i, j; for(i = 2; i < N; i++) { if(i % 2) prime[i] = false; else prime[i] = true; } for(i = 3; i <= sqrt(N); i += 2) if(prime[i]) for(j = i + i; j < N; j += i) prime[j] = false; for(i = 2; i < 100; i++) //由于输出将占用太多io时间,所以只输出2-100内的素数。可以把100改为N if(prime[i]) printf("%d ", i); return 0; }
时间: 2024-11-04 05:57:24