我正在创建两个类,构造类和主要方法,我从用户输入读取一个数字并吐出数字的主要分解,代码是用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;
}
}
}
答案 0 :(得分:2)
@ 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 计算机程序设计的艺术, Vol I,#4.5.4算法C,源于费马,但请注意他的网站上有一个重要的更正。他给出了一个很好的测试值8616460799L
,因为它有两个相当大的素因子。
答案 1 :(得分:0)
您可以添加一种方法来检查返回的因子是否是一个主要因素: 尝试这样的事情:
public bool isPrime(int number) {
int i;
for (i=2; i*i<=number; i++) {
if (number % i == 0) return false;
}
return true;
}
您可以将其用作:
public class FactorPrinter
{
public static void main(String[] args)
{
//your initial code
while (!factor.hasMoreFactors())
{
int nextFactor= factor.getNextFactor()
if(isPrime(nextFactor))
{
System.out.print();
}
}
}
}
答案 2 :(得分:0)
以下方法将打印给定数字的素数。它还包含一些优化。
public static void primeFactors(int n) {
if (n <= 1) {
return;
}
while (n % 2 == 0) {
System.out.println(2);
n = n / 2;
}
while (n % 3 == 0) {
System.out.println(3);
n = n / 3;
}
for (int i = 5; i * i <= n; i += 6) {
while (n % i == 0) {
System.out.println(i);
n = n / i;
}
while (n % (i + 2) == 0) {
System.out.println(i + 2);
n = n / (i + 2);
}
}
if (n > 3) {
System.out.println(n);
}
}