8

したがって、私の課題では、ユーザーに整数の入力を求めるプログラムを作成し、その数値の素因数分解を出力する必要があります。これは私が持っているものです:

import java.util.Scanner;

public class PrimeFactor {
    public static void main(String[] args) {
        System.out.print("Enter a positive number: ");
        Scanner scanner = new Scanner (System.in);
        int number = scanner.nextInt();
        int count;
        for (int i = 2; i<=(number); i++) {
            count = 0;
            while (number % i == 0) {
                number /= i;
                count++;
                if (count == 0) {
                    continue;
                }
            }
            System.out.println(i+ "**" + count);
        }
    }
}

私が今抱えている問題は、15453 などの数値で実行すると、素因数だけが必要な場合に 1 から 100 までのすべての因数とその指数のリストを取得することです。続行します。

4

7 に答える 7

4

あなたはもうすぐそこにいます!ブロックをループのif-continue外に移動します。forそうしないと、意図したループではなく、最も内側のループを「続行」します。

while (number % i == 0) {
    number /= i;
    count++;
}
if (count == 0) {
    continue;
}
System.out.println(i+ "**" + count);

System.out.printlnまたは、呼び出しを で囲むこともできます。これは、にif (count != 0)続く唯一のステートメントだからcontinueです。

while (number % i == 0) {
    number /= i;
    count++;
}
if (count != 0) {
    System.out.println(i+ "**" + count);
}

あなたのプログラムは ideone: linkにあります。

于 2012-09-24T17:53:48.903 に答える
2
public class _03_LargestPrimeFactor {

public static void main(String[] args) {

    long a = 600851475143L;

    for(int i=2; i<(a/i); i++){                         // no factors would exist beyond a/i for a particular i

        while( a%i == 0){                               // if i is a factor 
            a = a/i;                                    // divide a by i else we wont get a prime number
            System.out.print(a + " x " + i + "\n");
        }
    }

    if(a > 1)
    System.out.println("largest prime factor: " + a);
}

}

コンソール:

8462696833×71

10086647×839

6857×1471

最大の素因数: 6857

于 2016-08-27T10:00:53.367 に答える
0

乗算を 2 回出力している理由がわかりません! クリーンアップされたコードは次のとおりです。

public static void printPrimeNumbers(int prime) {

    int n;

    for (int i = 2; i <= prime; i++) {
        n = 0;
        while (prime % i == 0) {
            prime /= i;
            n++;

        }

        if (n != 0) {
            for (int j = n; j > 0; j--) {
                System.out.print(i);

                if (prime != 1) {
                    System.out.print("*");
                }
            }
        }
    }
}
于 2014-08-01T20:00:24.470 に答える
0

あなたは近いです:

  1. System.out.println ステートメントは for ループ内にある必要があり、 for のみを表示する必要があります。count>0
  2. を削除しif(count == 0) { continue; }ます。インクリメントしただけなので役に立ちませんcount
于 2012-09-24T17:51:05.403 に答える