【问题标题】:Prime Factorization Program Java素数分解程序 Java
【发布时间】:2014-03-26 17:37:09
【问题描述】:

这些是我对程序的说明:

编写一个程序,询问用户一个整数(使用 JOptionPane),然后打印出它的素数分解。

例如,当用户输入 150 时,程序应该打印“150 的素数分解:2 3 5 5”。

使用带有方法 nextFactor 和 hasMoreFactors(谓词方法)的类 FactorGenerator。实例字段应该是数字和因子。 hasMoreFactors 方法应该将 factor 初始化为 2 并使用 while 循环来增加 factor 直到 factor 均匀地除以数字(在这种情况下 hasMoreFactors 返回值 true )或 factor 变得太大(在这种情况下 hasMoreFactors 返回值 false )。

在 FactorGeneratorTest 中,应该允许用户输入任意数量的整数。输入应继续,直到按下取消按钮。建议输入的整数为30、100、2310、27225。

到目前为止,这是我的 FactorGenerator 类:

package primeFactorization;

public class FactorGenerator {

public FactorGenerator(double input) {
    number = input;
}

public String hasMoreFactors() {
    factor = 2;
    boolean loop = true;
    primeFactors = "Prime Factors are: ";
    while(loop) {
        if(number % factor == 0) {
            number = number / factor;
            primeFactors = (number + ", ");
            }
            if(factor > number) {
                loop = false;
            }
            if(number % factor != 0) {
                factor++;
            }
            if(number < 2) {
                loop = false;
            }
        }
        return primeFactors;
    }

    private String primeFactors;
    private boolean hasFactor;
    private double number;
    private double factor;
}

这是我的测试课:

package primeFactorization;

import javax.swing.JOptionPane;

public class FactorGeneratorTest 
    {
    public static void main(String[]args) {
        String input = JOptionPane.showInputDialog("Enter a number. ");
        Double num = Double.parseDouble(input);

        FactorGenerator factors = new FactorGenerator(num);

    System.out.println(factors.hasMoreFactors());
}
}

我该如何进行这项工作?

【问题讨论】:

  • 到目前为止到底什么不起作用?
  • 您允许的数字有多大?具体来说,主要因素有多大?您可以对 10^6 左右的所有数字进行因式分解,并在相当短的时间内存储结果。较大的数字需要单独分解它们,并且可能需要专门的算法在合理的时间内解决。

标签: java math primes prime-factoring


【解决方案1】:

您正在使用变量编号的中间值重新分配 hasMoreFactors() 方法中的字符串变量 primeFactors。 primeFactors 应与素因子的值(即变量因子的值)连接。 hasMoreFactors() 应该如下所示:

public String hasMoreFactors() {
        factor = 2;
        boolean loop = true;
        primeFactors = "Prime Factors are: ";
        while (loop) {
            if (number % factor == 0) {
                number = number / factor;
                primeFactors += (factor + ", ");
            }
            if (factor > number) {
                loop = false;
            }
            if (number % factor != 0) {
                factor++;
            }
            if (number < 2) {
                loop = false;
            }
        }
        return primeFactors;
    }

【讨论】:

    【解决方案2】:

    示例: 输入是 35,你从因子 2 开始,但 35 % 2 = 1 所以你永远不会来到 factor++
    将此直接放在循环的末尾,并询问在该轮中是否发现没有因素。

    【讨论】:

      猜你喜欢
      • 2011-05-15
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多