素因构造函数

时间:2013-03-22 05:41:42

标签: java factorization

我正在创建两个类,构造类和主要方法,我从用户输入读取一个数字并吐出数字的主要分解,代码是用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;
        }
    }
}

3 个答案:

答案 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);
    }
}