#include<cstdio> #include<iostream> #include<cstring> #include<cmath> using namespace std; int prime[200000],primetot=0; const int maxn=1000000; bool bo[1000010]; int primenum[1000010]; int T,n; int main() { memset(primenum,0,sizeof(primenum)); memset(bo,0,sizeof(bo)); bo[0]=bo[1]=1; primenum[0]=primenum[1]=0; for(int i=2;i<maxn;i++) { primenum[i]=primenum[i-1]; if(!bo[i])prime[++primetot]=i,primenum[i]++; for(int j=1;j<=primetot;j++) { if(i*prime[j]>maxn)break; if(i*prime[j]<0)printf("%d %d\n",i,prime[j]); bo[i*prime[j]]=1; //if(i%prime[j]) break; } //printf("%d\n",primenum[i]); } for(int i=1;i<=10;i++) printf("%d\n",primenum[i]); scanf("%d",&T); for(int tt=1;tt<=T;tt++) { scanf("%d",&n); int sub=0; if(!bo[n]) { printf("%d\n",primenum[n]+1); //printf("---"); printf("%d %d\n",bo[n],n); } else { if(n==1) { printf("1\n"); continue; } int cnt=1; while(n!=1) { if(n%prime[cnt]) { sub++; } while(n%prime[cnt]) { n/=prime[cnt]; } } printf("%d\n",primenum[n]+2-sub); } } return 0; }
时间: 2024-10-25 15:26:54