我正在创建两个类,即构造类和main方法,在这些类中,我从用户输入中读取数字并吐出数字的素因式分解,代码是使用Java编写的。
例如:
输入数字:150
5
5
3
2
但是,对于我的程序,我正在获取所有因素列表。
例:
输入数字:150
150
75
50
25
5
3
1个
我将如何改变以获得主要因素?
主要方法:
import java.util.*;
public class FactorPrinter
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.print("Enter a integer: ");
String input1 = scan.nextLine();
int input = Integer.parseInt(input1);
FactorGenerator factor = new FactorGenerator(input);
System.out.print(factor.getNextFactor());
while (!factor.hasMoreFactors())
{
System.out.print(factor.getNextFactor());
}
}
}
这是我的课:
public class FactorGenerator
{
private int num;
private int nextFactor;
public FactorGenerator(int n)
{
num = nextFactor = n;
}
public int getNextFactor()
{
int i = nextFactor - 1 ;
while ((num % i) != 0)
{
i--;
}
nextFactor = i;
return i;
}
public boolean hasMoreFactors()
{
if (nextFactor == 1)
{
return false;
}
else
{
return true;
}
}
}
最佳答案
@Bohemian的已删除答案的更正版本:
for (int i = 2; input > 1 && i <= input; i++)
{
if (input % i == 0)
{
System.out.print(i+" ");
do
{
input /= i;
} while (input % i == 0);
}
}
有更快的算法,例如Knuth计算机编程艺术,第一卷,#4.5.4算法C,源自Fermat,但请注意,他的网站上有一个重要的更正。他具有
8616460799L
的优点,因为它具有两个相当大的素因数,因此具有很好的测试价值。