跟素數篩有相似處
另外:不要用while(cin>>n),會導致TLE(orz)
#include<iostream>
#include<cmath>
#define maxn 1000005
using namespace std;
int flag[maxn];
void prepare(){
int k=1;
for(int i=2;i<maxn;i++){
if(flag[i]==0){
for(int j=1;j*i<maxn;j++){
flag[i*j]=k;
}
k++;
}
}
}
int main(){
int n;
prepare();
while(scanf("%d",&n)!=EOF){
cout<<flag[n]<<endl;
}
return 0;
}