#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#define maxa 1000000
using namespace std;
int m[maxa];///最大的质因子
int a[maxa];///是第几个素数
int prime()
{
int i,j;
memset(m,0,sizeof(m));
int cnt = 0;
for(i = 2; i <= maxa; i++)
{
if(!m[i])
{
cnt++;
for(j = 1;j*i <= maxa; j++)
{
m[i*j] = i;
a[i] = cnt;
}
}
}
}
int main()
{
int n;
prime();
while(scanf("%d",&n)!=EOF)
{
if(n==0||n==1)
printf("0\n");
else
{
printf("%d\n",a[m[n]]);
}
}
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#define maxa 1000000
using namespace std;
int m[maxa];///最大的质因子
int a[maxa];///是第几个素数
int prime()
{
int i,j;
memset(m,0,sizeof(m));
int cnt = 0;
for(i = 2; i <= maxa; i++)
{
if(!m[i])
{
cnt++;
for(j = 1;j*i <= maxa; j++)
{
m[i*j] = i;
a[i] = cnt;
}
}
}
}
int main()
{
int n;
prime();
while(scanf("%d",&n)!=EOF)
{
if(n==0||n==1)
printf("0\n");
else
{
printf("%d\n",a[m[n]]);
}
}
}
时间复杂度大大降低喽