我正在创建两个类,即构造类和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的优点,因为它具有两个相当大的素因数,因此具有很好的测试价值。

09-26 02:51