题目
从标准输入读入一个大于 1 的正整数 n,将其分解为质因数乘积的形式输出(例如:90=2*3*3*5)。
输入格式:一行输入一个正整数 n。
输出格式:按 n=p1*p2*...*pk 的格式输出质因数分解结果,末尾换行。
数据范围与约定:2 ≤ n ≤ 109。
思路与算法
1. 试除法原理
从最小质数 d = 2 开始试除。若 x % d == 0,则 d 必为质因子,循环除尽该因子并格式化输出,然后 d++。
2. 范围缩减到 √x
因数试除只需进行到 d * d ≤ x。循环结束后若 x > 1,则剩余的 x 本身就是一个大于 √n 的质因数,直接追加输出即可。
完整程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
boolean first = true;
System.out.print(n + "=");
long x = n;
// 试除法只需进行到 d * d <= x
for (long d = 2; d * d <= x; d++) {
// 反复除尽当前质因子 d
while (x % d == 0) {
if (!first) {
System.out.print("*");
}
System.out.print(d);
first = false;
x /= d;
}
}
// 若最后剩余的 x > 1,说明它本身是一个大于 √n 的质数
if (x > 1) {
if (!first) {
System.out.print("*");
}
System.out.print(x);
}
System.out.println();
}
}运行示例
输入:
90输出:
90=2*3*3*5