源本科技 | 码上会

正整数分解质因数

2026/01/26
21
0

题目

将一个正整数分解质因数。例如:输入 90, 打印出 90=2*3*3*5

运行示例

请输入一个大于1的正整数:90
90=2*3*3*5
请输入一个大于1的正整数:17
17=17
请输入一个大于1的正整数:100
100=2*2*5*5
👈点击左箭头查看答案(一定要在自己思考并实现后再看参考答案哦!)
import 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(); // 换行
    }
}

算法原理说明

  1. 从 i = 2 开始试除

    • 因为 2 是最小质数。

  2. 只要能被 i 整除,就不断除以 i

    • 这样可以 完全除尽该质因子(如 90 ÷ 2 = 45,不再含因子 2)。

  3. i 递增,但无需判断 i 是否为质数

    • 因为所有合数(如 4, 6, 8...)的质因子(2, 3...)已经被提前除尽,所以 n % i == 0 时,i 必为质数。

  4. 循环条件 i * i <= n

    • 若 n 有大于 √n 的因子,则最多只有一个(且必为质数),留在最后处理。

  5. 最后若 n > 1,则 n 是剩余的大质因子