质因数分解计算器中的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]
当 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]