Largest prime factor |
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) |
Total Submission(s): 5812 Accepted Submission(s): 1768 |
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 |
题意:寻找数n最大的素数因子的编号,即是第几个素数,例:4的素数因子2是第一个素数,输出1
解题思路:常规算法必然TLE,所以要使用一种类似筛法求素数的办法,直接将数据打表最终输出。没得到一个素数便将之后他的倍数最大素数因子更替为当前这个素数。
注意:不要使用cin、cout 会TLE的,/(ㄒoㄒ)/~~
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int Max=1000005;
int a[Max],c[Max];
int main()
{
int i,n,j,t,num;
memset(a,0,sizeof(a));
num = 0;
for(i=2;i<=Max;i++)
{
if(a[i]==0)
{
num++;
for(j=i;j<=Max;j+=i)
{
a[j]=num;
}
}
}
while(~scanf("%d",&n))
{
printf("%d\n",a[n]);
}
//cout << "Hello world!" << endl;
return 0;
}