一开始以为询问是在线的,然后各种GG。。。
按照题意,询问是预先确定好的,所以直接询问 是素数的多少次方就行了 。
例如,n=10时,询问 2 2^2 2^3 3 3^3 5 7。
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1010;
int npri[MAXN],pri[MAXN];
int main()
{
int i,j,ans,n,prisum,tmp;
memset(npri,0,sizeof(npri));
prisum=0;
for(i=2;i<MAXN;i++)
{
if(!npri[i])
{
pri[prisum++]=i;
for(j=i+i;j<MAXN;j+=i)
npri[j]|=1;
}
}
while(~scanf("%d",&n))
{
ans=0;
for(i=0;i<prisum&&pri[i]<=n;i++)
{
tmp=pri[i];
while(tmp<=n)
{
tmp*=pri[i];
ans++;
}
}
printf("%d\n",ans);
}
}