列出n以内的质子数
1 #include <iostream> 2 #include<math.h> 3 using namespace std; 4 5 int* Sieve(int n, int &length) 6 { 7 int *A,*B; 8 int p=0,j=0,i=0,k=0,q=0; 9 10 A = new int[n]; 11 for(p=2 ; p<n; p++) 12 A[p] = p; 13 14 /*关键步骤,把p的倍数的数消掉为0*/ 15 for(p=2; p<=sqrt(n); p++) 16 { 17 if(A[p]!=0) 18 j= p*p; 19 while(j<=n) 20 { 21 A[j]=0; 22 j=j+p; 23 } 24 } 25 26 /*获取B数列长度*/ 27 for(q=2;q<n;q++) 28 { 29 if(A[q]!=0) 30 i++; 31 } 32 33 B = new int[i]; 34 35 /*将A的非0值赋予B*/ 36 for(p=2; p<n; p++) 37 { 38 if(A[p]!=0) 39 { 40 B[k]=A[p]; 41 k++; 42 } 43 } 44 length = i; 45 return B; 46 } 47 48 int main(int argc, char* argv[]) 49 { 50 int length =0; 51 int *R = Sieve(100,length); 52 for(int i=0;i<length;i++) 53 cout << R[i] << " "; 54 cout << endl; 55 56 return 0; 57 }