质因数分解计算器中的for循环显示合数并且循环不重新启动

For loop in prime factorization calculator displays composite numbers as well as the loop does not restart

当 for 循环检测到一个小于用户输入的正整数且可完全整除的数字时,它会打印它,这是因为 for 循环只是继续对每个数字进行计数。但是,我需要它来分解用户输入的正整数。

import java.util.Scanner;
public class PrimeFactor {

    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);

        System.out.print("Enter a positive integer: ");
        int Number = console.nextInt();

        for (int counter =2; counter < Number; counter++) {
            if (Number % counter ==  0) {
                System.out.print(" "+counter);
            }

        }

    }

}

当您确定 counter 是一个因数时,您需要做的就是将 Number 除以 counter。您还需要再次尝试 counter,以防一个数字中的一个因子有多个副本,例如12 是 2 * 2 * 3。不要忘记打印最后的 Number,以防它没有一直下降到 1.

for (int counter = 2; counter <= Math.sqrt(Number); counter++) {
    while (Number % counter == 0) {
        Number /= counter;
        System.out.print(" " + counter);
    }
}
// Print what's left.
if (Number > 1) {
   System.out.println(" " + Number);
}

顺便说一句,我还更改了 for 循环条件以停止在 Number 的平方根处,因为对于质因数试验,如果您发现一个大于平方根,那你应该先找到对应的小于平方根的因数了

此外,正常的 Java 命名约定会让您将变量 number 命名为小写,以避免与 类 混淆,例如 java.lang.Number.

你在正确的轨道上,你只需要在循环中将 Number(下面代码中的 num)除以 counter

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        System.out.print("Enter a positive integer: ");
        int num = console.nextInt();
        console.close();
        System.out.printf("Prime factors of %d: %s%n", num, getPrimeFactors(num));
    }

    public static List<Integer> getPrimeFactors(int num) {
        List<Integer> primeFactors = new ArrayList<>();
        for (int counter = 2; counter <= num; counter++) {
            while (num % counter == 0) {
                primeFactors.add(counter);
                num /= counter;
            }
        }
        if (num > 1) primeFactors.add(num);
        return primeFactors;
    }
}

用法示例:

Enter a positive integer: 12
Prime factors of 12: [2, 2, 3]