巧用素数筛1

Description
Everybody knows any number can be combined by the prime number.
Now, your task is telling me what position of the largest prime factor.
The position of prime 2 is 1, prime 3 is 2, and prime 5 is 3, etc.
Specially, LPF(1) = 0.

Input
Each line will contain one integer n(0 < n < 1000000).

Output
Output the LPF(n).

Sample Input
1
2
3
4
5

Sample Output
0
1
2
1
3

#include
#include
#include
#include
#include
using namespace std;
int prime[1000001];
bool isprime[1000001];
int p;
struct node//完全可以不用,只是懒不想改
{
    int pos;
} pp[1000009];
void sieve()
{
    int i,j;
    memset(isprime,true,sizeof(isprime));
    isprime[0]=isprime[1]=false;
    for(i=2; i<=1000001; i++)
    {
        if(isprime[i])
        {
            pp[i].pos=p;
            prime[p++]=i;
            for(j=2*i; j<=1000000; j+=i)
            {
                pp[j].pos=pp[i].pos;//J的最大素数因子就是I
                isprime[j]=false;
            }
        }
    }
    isprime[1]=true;
}

int main()
{
    int n;
    p=1;
    prime[0]=1;
    sieve();
    pp[1].pos=0;
    while(scanf("%d",&n)!=EOF)
    {
        printf("%d\n",pp[n].pos);
    }
    return 0;
}

你可能感兴趣的:(巧用素数筛1)