用于质因数分解的Java程序打印过多

时间:2018-12-23 20:21:29

标签: java primes prime-factoring factorization

我在学校遇到了一个需要解决的问题,就像这样:

  

编写一个程序,该程序读取大于1的正整数,然后按升序打印出数字的质数。如果该数字是质数,请打印出该数字,并在其后声明该数字是质数,如示例之一所示。

因此,我编写了此程序,当我输入实际的素数时,它具有预期的行为。如果我输入97,则输出将为“ 97是质数”。如预期的那样。

但是,当我输入120时,它会打印“ 2 2 2 3 5是素数”,其中预期的行为只是打印数字而不是“是素数”文本。

检查输入数字是否为质数的方法,如果是,则输出其因数:

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);
}

因此,我希望获得一些帮助,弄清楚如何制作它,以便“是质数”。仅当输入的数字是素数时才打印结尾。

3 个答案:

答案 0 :(得分:0)

我敢肯定,如果您再使用它一点,您会找到答案,但是在这里您可以: 我会写一个方法 QueryFuncPromise 然后:

QueryFuncFuture

另一种选择(很难看)是,如果发现一个因素,则“记住”: 注意public static boolean isPrime(int n)及其用法:

if (isPrime(n)) {
        System.out.print(bla bla bla...);
} else {
    print here factors
}

}

答案 1 :(得分:0)

我确实尝试创建一种方法来检查数字是否为素数。看起来像这样:

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;

但这也将句子的结尾打印了出来。::/

答案 2 :(得分:0)

您可以将参数n保存到变量中以保留它。

int input = n;

然后最后将您的输出更改为以下内容:

if (n > 2) {
    System.out.print(n);
}
if (n == input) {
    System.out.print(" is a prime number.");
}