【发布时间】: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