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
题目大意:每个素数在素数表中都有一个序号,设1的序号为0,则 2
的序号为1(4是2的倍数,所以4的序列也是1),3的序号为2,5的序号为3,以此类推。现在要求输出 所
给定的数n的最大质因子的序号,0 < n < 1000000。
思路:巧用素数打表法。用sum计算素数的序号,将素数连同他的倍数一起置为它的素数序号, 从小到大循环, 这样数组里存放的序号就是最大素数因子的序号了。
注意:初始化时令所有数为0。
再通过sum计算累加,改变之后primeNum[i]为 数 i的最大素数因子的序号。
import java.util.Arrays;
import java.util.Scanner;
public class Main{
static int primeNum[] = new int[1000002];
public static void main(String[] args) {
dabiao();
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
System.out.println(primeNum[n]);
}
}
private static void dabiao() {
int sum = 1;
Arrays.fill(primeNum, 0);
for (int i = 2; i < primeNum.length; i++) {
if (primeNum[i] == 0) {
for (int j = i; j < primeNum.length; j = j + i) {
primeNum[j] = sum;
}
sum++;
}
}
}
}