【问题标题】:Java program for prime factorization prints too much用于素数分解的 Java 程序打印太多
【发布时间】:2018-12-23 20:21:28
【问题描述】:

我在学校有一个问题要解决,它是这样的:

编写一个程序,读取一个大于 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);
}

所以我需要一些帮助来弄清楚如何使它成为“素数”。仅当输入的数字特别是素数时才打印结尾。

【问题讨论】:

    标签: java primes prime-factoring factorization


    【解决方案1】:

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

    int input = n;
    

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

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

    【讨论】:

      【解决方案2】:

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

      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;
      

      但这也打印了最后的句子..:/

      【讨论】:

        【解决方案3】:

        我敢肯定,如果你多玩一点,你会找到答案的,但是你去吧: 我会写一个方法 public static boolean isPrime(int n) 然后:

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

        另一个选择(有点难看)是“记住”如果你发现了一个因素: 注意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.");
        }
        

        }

        【讨论】:

        • 我之前确实尝试过,我让它看起来像这样(看看我下面的评论)
        猜你喜欢
        • 1970-01-01
        • 2015-12-16
        • 2011-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-04
        • 1970-01-01
        • 2017-09-09
        相关资源
        最近更新 更多