-2

ユーザー入力から数値の最小の素因数を指定するだけでなく、すべての素因数を出力するプログラムを作成しようとしています。(例: 12 が与えられた場合、素因数は 2、2、および 3 です。) 少し検索しましたが、すべての素因数を記憶しているプログラムの結果はすべて <> を使用しているようです。何らかの理由で、これは認識されません。これを回避する別の方法があるかどうか疑問に思っていましたか?

編集:最小因数を正常に印刷しましたが、すべての素因数を印刷するのにまだ問題があります。編集されたコード:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class PrimeFactor {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner in = new Scanner(System.in);
    System.out.println("Please enter an integer");
    long n = in.nextLong();
    System.out.println("Smallest prime factor of "+n+" is "+leastFactor(n));
}

public static ArrayList<Integer> leastFactor(long n) {
    ArrayList primeFactors = new ArrayList<Integer>();
    for (int i=2; i<=n; i++) {
        if (n%i==0) {
            primeFactors.add(i);
        }
    }

    if(primeFactors.size() > 0){
        return (primeFactors);
    }
}
}
4

3 に答える 3

0

以下の変更により、コードが修正されます。に注意してくださいSet<Integer>typeに含まれるものの情報を追加する必要がありSetます。は<>省略形なので、繰り返す必要はありませんInteger。つまり、次のいずれかを実行できます。

Set<Integer> primeFactors = new HashSet<>();

または:

Set<Integer> primeFactors = new HashSet<Integer>();

変更したコードは次のとおりです。

import java.util.Scanner;
import java.util.HashSet;
import java.util.Set;
public class PrimeFactor {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        System.out.println("Please enter an integer");
        int input = sc.nextInt();
        System.out.println(leastFactor(input));
    }

    public static int leastFactor(int input) {
        Set<Integer> primeFactors = new HashSet<>();
        for (int i=2; i<=input; i++) {
            if (input%i==0) {
                primeFactors.add(i);
            }
        }

        if(primeFactors.size() > 0){
            return primeFactors.toArray(new Integer[primeFactors.size()])[0];
        }
        return 1;
    }
}

これで、primeFactors が入力されました。primeFactors のサイズの追加チェックを追加しました。要素がある場合は、最小になる最初の要素を返します。要素がない場合は 1 を返す

于 2016-02-28T05:35:51.610 に答える
0
Scanner z = new Scanner(System.in);
//int n;
long n;//long to display all prime factors.
List primefactors = new ArrayList():
System.out.print("Enter a Number : ");
//n= z.nextInt();
n = z.nextLong();
System.out.print("The Prime Factors of "+n+" are : "); 
int i=2;
while(n>1)
  {
   if(n%i == 0)
    {
     primefactors.add(i);
     n=n/i;
    }
   else
    i++;
  }
System.out.println(Collections.min(primefactors));
primefactors.forEach(System.out::println);//to display all values

私のコードがお役に立てば幸いです。

于 2016-02-28T05:38:00.013 に答える
0

ところで:上限サイクル値を変更することで、コードの速度を簡単に上げることができます

for (int i=2; i<=input; i++) {
...
}

あなたの平方根にinput

int upper = Math.round(Math.sqrt(input));
for (int i = 2; i < upper; i++) {
...
}
于 2016-02-28T05:48:49.533 に答える