X-man

导航

hdu 2136 Largest prime factor

#include<stdio.h>
#include<string.h>
#define Max 1000100
int a[Max];
void maxprimefactor()
{
    int i,j;
    a[1]=1;
    for(i=2;i<Max;i++)//i=2;
    {
        if(a[i]==0)
        {
            for(j=1;i*j<Max;j++)
            a[i*j]=i;
        }
    }
}
bool visit[Max];
int prime[Max];
int hash[Max];
void init_prim()
{
    memset(visit,true,sizeof(visit));
    int num=0;
    hash[1]=0;
    for(int i=2;i<=Max;i++)
    {
        if(visit[i])
        {
            num++;
            prime[num]=i;
            hash[i]=num;
        }
        for(int j=1;j<=num&&i*prime[j]<=Max;j++)
        {
            visit[i*prime[j]]=false;
            if(i%prime[j]==0)break;
        }
    }
}
int main()
{
    int n;
    maxprimefactor();
    init_prim();
    while(scanf("%d",&n)!=EOF)
    {
        printf("%d\n",hash[a[n]]);
    }
    return 0;
}

 

posted on 2013-08-09 19:32  雨钝风轻  阅读(222)  评论(0编辑  收藏  举报