已知正整数 n 是两个不同的质数的乘积,试求出两者中较大的那个质数。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int largerPrimeFactor = getLargerPrimeFactor(n);
System.out.println(largerPrimeFactor);
}
public static int getLargerPrimeFactor(int n) {
int largerFactor = 0;
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
largerFactor = Math.max(largerFactor, i);
while (n % i == 0) {
n /= i;
}
}
}
if (n > 1) {
largerFactor = Math.max(largerFactor, n);
}
return largerFactor;
}
}
注:
在计算 n 的质因数时,我们需要找到 n 中的所有质因数,并且要求两个质因数中较大的那个。为了达到这个目的,我们在找到一个质因数 i 后,将 n 中所有的 i 因子除去。
这样做的原因是,如果 n 可以整除 i,那么 n 中的质因数中必然存在另一个质因数 j,使得 n 可以表示为 n = i * j。如果我们不除去 n 中的 i 因子,而继续寻找下一个质因数,那么我们将找到的质因数必然是 j。然而,根据题目要求,我们需要求得两个质因数中较大的那个。
因此,为了确保我们找到的质因数是较大的那个,我们在找到一个质因数 i 后,将 n 中的所有 i 因子除去。这样,我们就排除了可能的较小质因数,并确保我们找到的是较大的质因数。