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; }