Largest prime factor
http://acm.hdu.edu.cn/showproblem.php?pid=2136
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 18126 Accepted Submission(s): 6284
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
题目大意
求n的最大质因子是第几个素数,如果n=1输出0
思路
使用筛选法打表,用数组a记录每个数的最大质因子所在的位置
C++程序
#include<iostream>
using namespace std;
const int N=1000010;
int a[N+1];
void solve(int n)
{
int cnt=0;
for(int i=2;i<=n;i++)
if(!a[i])
{
a[i]=++cnt;//素数i的最大质因子的位置就为cnt
for(int j=i+i;j<=n;j+=i) a[j]=cnt;//合数j的最大质因子的位置也为cnt
}
}
int main()
{
solve(N);
int n;
while(~scanf("%d",&n))
{
printf("%d\n",a[n]);
}
return 0;
}