Largest prime factor |
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) |
Total Submission(s): 6066 Accepted Submission(s): 1860 |
Problem 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 |
Author
Wiskey
|
Source
HDU 2007-11 Programming Contest_WarmUp
|
Recommend
威士忌
|
代码:
#include<cstdio>
#include<cstring>
int su[1000000];
int shu[2000100];
int zhao(int xx)
{
if (xx<=2) return 1;
int R=148932,L=0,M,lp;
while (L<=R)
{
M=(L+R)/2;
if (su[M]==xx)
return M+1;
if (su[M]<xx)
{
L=M+1;
}
else
R=M-1;
}
}
int main()
{
int a,b;
int kp=0;long long ii,jj;
memset(shu,0,sizeof(shu));
for (ii=2;ii<2000001;ii++)
{
if (shu[ii]==0)
{
su[kp++]=ii;
for (jj=ii*ii;jj<2000001;jj+=ii)
shu[jj]=1;
}
}
while (~scanf("%d",&a))
{
if (a==1)
{
printf("0\n");
continue;
}
for (b=2;b*b<=a;b++)
{
if (shu[b]==0)
if (a%b==0)
{
while (a%b==0)
a/=b;
}
}
if (a>1)
printf("%d\n",zhao(a));
else
printf("%d\n",zhao(b-1));
}
return 0;
}