这绿题贼水......
原理我不讲了,随便拿张草稿纸推一下就明白了。
1 #include <cstdio> 2 using namespace std; 3 const long long int N=100000020; 4 int su[N],ans,top; 5 bool vis[N]; 6 void shai(int b) 7 { 8 for(int i=2;i<=b;i++) 9 { 10 if(!vis[i]) 11 { 12 su[top++]=i; 13 } 14 for(int j=0;j<top && i*su[j]<=b;j++) 15 { 16 vis[su[j]*i]=1; 17 if(i%su[j]==0) break; 18 } 19 } 20 return; 21 } 22 int main() 23 { 24 int n; 25 scanf ("%d",&n); 26 shai(n); 27 printf("%d",top); 28 return 0; 29 }