0

構築クラスと、ユーザー入力から数値を読み取り、数値の素因数分解を吐き出すメインメソッドの 2 つのクラスを作成しています。コードは 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;
        }
    }
}
4

3 に答える 3

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 The Art of Computer Programming、 Vol I、#4.5.4アルゴリズムCは、Fermatから派生していますが、彼のWebサイトには重要な修正があることに注意してください。8616460799L彼は2つのかなり大きな素因数を持っているので、良いテスト値を与えます。

于 2013-03-22T06:23:42.550 に答える
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();
           }
        }
     }  
}
于 2013-03-22T06:03:10.773 に答える