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
/**
素数筛法,每遍历一个外层点时
将它的所有倍数全部赋值为num(当前质因子的序号)
从小到大逐个遍历即为最大质因子的序号
*/
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<queue>
#include<vector>
using namespace std;
const int Max = 1e6 + 5;
int n;
int a[Max];
int main()
{
memset(a, 0, sizeof(a));
int num = 1; //质因子序号
for(int i = 2; i <= Max; i++)
{
if(!a[i])
{
for(int j = i; j <= Max; j += i) //i的所有倍数都被赋值为同一个序号
{
a[j] = num;
}
num++;
}
}
while(scanf("%d", &n) != EOF)
{
printf("%d\n", a[n]);
}
return 0;
}