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,输出n的最大素因子在素数表中的位置
思路:埃氏筛, 虽然复杂度比欧拉筛打,但埃氏筛的特点是每个数最后都会被他的最大素因子筛一次,所以我们每个数最后是被哪个素因子筛的,就可以o(1)输出答案了
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include <map>
using namespace std;
const int MAX = 1e6 + 50;
typedef long long LL;
int prime[MAX];
int vis[MAX];
int ans[MAX];
void init(int n){
int k = 1;
for(int i = 2; i < n; i++){
if(!vis[i]){
prime[++k] = i;
}
for(int j = 1; j * prime[k] < n; j++){
vis[j * prime[k]] = 1;
ans[j * prime[k]] = k - 1;
}
}
}
int main(){
int n;
init(MAX);
while(~scanf("%d", &n)){
printf("%d\n", ans[n]);
}
return 0;
}