Java 质因数分解程序打印过多
Java program for prime factorization prints too much
我在学校被要求解决一个问题,它是这样的:
Write a program that reads a positive integer greater than 1 and then prints out the prime factors of the number in increasing order. If the number is a prime, print out that number followed by a statement saying that it is a prime, as shown in one of the examples.
然后我写了这个程序,当我输入一个实际素数时它有预期的行为。如果我输入 97,输出将是“97 是质数”。果然如此。
但是,当我输入 120 时,它会打印“2 2 2 3 5 是质数”,其中预期的行为将仅打印数字而不是 "is a prime number" 文本。
检查输入数字是否为质数的方法,如果是,则打印它的因数:
public static void primeFactors(int n) {
while (n % 2 == 0) {
System.out.print(2 + " ");
n = n/2;
}
for (int i = 3; i <= Math.sqrt(n); i = i+2) {
while (n % i == 0) {
System.out.print(i + " ");
n = n/i;
}
}
if (n > 2) {
System.out.print(n + " is a prime number.");
}
}
主要方法:
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
int n = reader.nextInt();
primeFactors(n);
}
所以我需要一些帮助来弄清楚如何做到这一点 "is a prime number." 结尾仅在输入的数字特别是素数时打印。
我敢肯定,如果您再多尝试一下,就会找到答案,但是现在开始吧:
我会写一个方法
public static boolean isPrime(int n)
然后:
if (isPrime(n)) {
System.out.print(bla bla bla...);
} else {
print here factors
}
另一个选项(有点难看)是 "remember" 如果你找到了一个因素:
注意 boolean foundFactor
及其用法:
public static void primeFactors(int n) {
boolean foundFactor = false;
while (n % 2 == 0) {
foundFactor = true
System.out.print(2 + " ");
n = n/2;
}
for (int i = 3; i <= Math.sqrt(n); i = i+2) {
while (n % i == 0) {
foundFactor = true
System.out.print(i + " ");
n = n/i;
}
}
if (n > 2 && !foundFactor) {
System.out.print(n + " is a prime number.");
}
}
我确实尝试创建一种方法来检查数字是否为素数。看起来像这样:
private static boolean isPrime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i < n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
但这也打印了最后的句子.. :/
您可以将参数 n 保存到一个变量中以保留它。
int input = n;
然后最后将输出更改为以下内容:
if (n > 2) {
System.out.print(n);
}
if (n == input) {
System.out.print(" is a prime number.");
}
我在学校被要求解决一个问题,它是这样的:
Write a program that reads a positive integer greater than 1 and then prints out the prime factors of the number in increasing order. If the number is a prime, print out that number followed by a statement saying that it is a prime, as shown in one of the examples.
然后我写了这个程序,当我输入一个实际素数时它有预期的行为。如果我输入 97,输出将是“97 是质数”。果然如此。
但是,当我输入 120 时,它会打印“2 2 2 3 5 是质数”,其中预期的行为将仅打印数字而不是 "is a prime number" 文本。
检查输入数字是否为质数的方法,如果是,则打印它的因数:
public static void primeFactors(int n) {
while (n % 2 == 0) {
System.out.print(2 + " ");
n = n/2;
}
for (int i = 3; i <= Math.sqrt(n); i = i+2) {
while (n % i == 0) {
System.out.print(i + " ");
n = n/i;
}
}
if (n > 2) {
System.out.print(n + " is a prime number.");
}
}
主要方法:
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
int n = reader.nextInt();
primeFactors(n);
}
所以我需要一些帮助来弄清楚如何做到这一点 "is a prime number." 结尾仅在输入的数字特别是素数时打印。
我敢肯定,如果您再多尝试一下,就会找到答案,但是现在开始吧:
我会写一个方法
public static boolean isPrime(int n)
然后:
if (isPrime(n)) {
System.out.print(bla bla bla...);
} else {
print here factors
}
另一个选项(有点难看)是 "remember" 如果你找到了一个因素:
注意 boolean foundFactor
及其用法:
public static void primeFactors(int n) {
boolean foundFactor = false;
while (n % 2 == 0) {
foundFactor = true
System.out.print(2 + " ");
n = n/2;
}
for (int i = 3; i <= Math.sqrt(n); i = i+2) {
while (n % i == 0) {
foundFactor = true
System.out.print(i + " ");
n = n/i;
}
}
if (n > 2 && !foundFactor) {
System.out.print(n + " is a prime number.");
}
}
我确实尝试创建一种方法来检查数字是否为素数。看起来像这样:
private static boolean isPrime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i < n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
但这也打印了最后的句子.. :/
您可以将参数 n 保存到一个变量中以保留它。
int input = n;
然后最后将输出更改为以下内容:
if (n > 2) {
System.out.print(n);
}
if (n == input) {
System.out.print(" is a prime number.");
}