bool nums[MAX]; __int64 prime[MAX_PRIME]; void MakePrime(){ __int64 i,j; __int64 pl=0; __int64 t; nums[0]=1,nums[1]=1; memset(prime,true,sizeof(prime)); for(i=2;i<MAX;i++) { if(!nums[i]) prime[pl++]=i; for(j=0;j<pl&& i*prime[j]<MAX;j++) { nums[i*prime[j]]=1; if(!(i%prime[j])) break; } } } 另外一个版本 #include <iostream> #include <vector> #include <time.h> using namespace std; __int64 prime[20000000]; __int64 sprime[20000000]; void MakePrime() { int i, j, n = 0, c, s; for(int i=0;i<20000000;i++) prime[i]=1; prime[1] = prime[0] = 0; for(i=2; i<40; ++i) if(prime[i]) { for (j=i; i*j<20000000; ++j) prime[i*j] = 0; } prime[1] = 0; for(i=0; i<20000000; ++i) if(prime[i]) sprime[n++] = i; } int main() { MakePrime(); cout<<clock()<<endl; }