将一个正整数分解质因数。例如:输入 90, 打印出 90=2*3*3*5
请输入一个大于1的正整数:90
90=2*3*3*5请输入一个大于1的正整数:17
17=17请输入一个大于1的正整数:100
100=2*2*5*5import java.util.Scanner;
public class PrimeFactorization {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("请输入一个大于1的正整数:");
int n = in.nextInt();
if (n <= 1) {
System.out.println("输入无效!请确保输入大于1的正整数。");
return;
}
System.out.print(n + "=");
boolean first = true; // 控制乘号输出
// 从最小质因数 2 开始
for (int i = 2; i * i <= n; i++) {
while (n % i == 0) {
if (!first) {
System.out.print("*");
}
System.out.print(i);
n /= i;
first = false;
}
}
// 如果最后 n > 1,说明它本身是一个质数
if (n > 1) {
if (!first) {
System.out.print("*");
}
System.out.print(n);
}
System.out.println(); // 换行
}
}从 i = 2 开始试除:
因为 2 是最小质数。
只要能被 i 整除,就不断除以 i:
这样可以 完全除尽该质因子(如 90 ÷ 2 = 45,不再含因子 2)。
i 递增,但无需判断 i 是否为质数:
因为所有合数(如 4, 6, 8...)的质因子(2, 3...)已经被提前除尽,所以 n % i == 0 时,i 必为质数。
循环条件 i * i <= n:
若 n 有大于 √n 的因子,则最多只有一个(且必为质数),留在最后处理。
最后若 n > 1,则 n 是剩余的大质因子。