【发布时间】:2015-03-30 18:21:02
【问题描述】:
这是我输出给定数的素数分解的程序。我仍然只是 java 的初学者,所以我知道它不是最有效的代码。当我输入相对较大的数字时,就会出现问题。
输入:11 输出:11
输入:40 输出:2 2 2 5
输入:5427 输出:3 3 3 3 67
输入:435843 输出:3 3 79 613
输入:23456789 输出:无(似乎存在无限循环,代码应返回 23456789,因为它本身就是一个素数)
什么可能导致这个问题?
import java.util.Scanner;
public class PrimeFactorization {
public static boolean isPrime(long n) {
boolean boo = false;
long counter = 0;
if (n == 1) {
boo = false;
} else if (n == 2) {
boo = true;
} else {
for (long i = 2; i < n; i++) {
if (n % i == 0) {
counter++;
}
}
if (counter == 0) {
boo = true;
}
}
return boo;
}
public static void primeFactorization(long num) {
for (long j = 1; j <= num; j++) {
if (isPrime(j)) {
if (num % j == 0) {
while (num % j == 0) {
System.out.printf(j + " ");
num = num / j;
}
}
}
if (num == 1) {
break;
}
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter any number:");
long num = scanner.nextLong();
System.out.print("Prime factorization of your number is: ");
primeFactorization(num);
scanner.close();
}
}
【问题讨论】:
-
请包含
primeFactorization方法的其余部分;看起来你只复制了最后一部分。