Java プライムを印刷するプログラム Numbers 1から100へ
⚡ スマートサマリー
1から100までの素数を印刷するプログラム Java 指定された範囲内のすべての値をスキャンし、約数がちょうど2つある値のみを報告します。この記事では、定義、検証方法、完全なプログラム、エラトステネスの篩、および検証済みの出力とのパフォーマンス比較について説明します。
素数とは何ですか?
A 素数 素数とは、1とそれ自身以外では割り切れない数のことです。1より大きい自然数で、2つのより小さい自然数の積では表せない数です。例えば、11は1とそれ自身以外では割り切れません。その他の素数には、2、3、5、7、11、13、17などがあります。
注意: 0 と 1 は素数ではありません。2 は唯一の偶数の素数です。
1から100までの間には、ちょうど25個の素数があります。下の表は、素数を10の位ごとにグループ分けしたもので、値が大きくなるにつれて数が減っていくパターンが視覚的に分かりやすくなっています。
| レンジ | 素数 Numbers | 数量カウント |
|---|---|---|
| 1 – 20 | 2、3、5、7、11、13、17、19 | 8 |
| 21 – 40 | 23、29、31、37 | 4 |
| 41 – 60 | 41、43、47、53、59 | 5 |
| 61 – 80 | 61、67、71、73、79 | 5 |
| 81 – 100 | 83、89、97 | 3 |
プライムの印刷方法 Numbers 1から100までのプログラム Java
以下は Java 1 から 100 までの素数を印刷するプログラム:
プログラムロジック:
- 主な方法は 素数プログラム Java 1から100までの素数を1つずつチェックするループが含まれています。
- main メソッドはメソッドを呼び出します
CheckPrimeある数が素数かどうかを判定するには Java どうか。 - 入力された数値(例えば17)を2から17までの値で割り、余りを調べます。余りが0であれば、その数値は素数ではありません。
- 数は、その数の半分より小さい数で割り切れることはありません。したがって、numberToCheck/2 だけをループ処理すれば十分です。入力が 17 の場合、半分は 8.5 なので、ループ処理では 2 から 8 までの値を繰り返します。
- If
numberToCheckが他の数で完全に割り切れる場合、false を返し、ループを終了します。 - If
numberToCheckが素数の場合、true を返します。 - 1から100までの素数の主な方法では JavaisPrimeが
TRUEそしてその値を素数に加えるNumbers文字列が見つかりました。 - 最後に、1から100までの素数を印刷します。 Java.
チェック処理を独立したメソッドに分離することで、プログラムの再利用性が向上します。同じ CheckPrime メソッドは、maxCheck 変数を変更するだけで、任意の上限値を指定して呼び出すことができます。
public class PrimeNumbers {
public static void main(String[] args) {
int i;
int num = 0;
int maxCheck = 100; // maxCheck limit till which you want to find prime numbers
boolean isPrime = true;
//Empty String
String primeNumbersFound = "";
//Start loop 2 to maxCheck
for (i = 2; i <= maxCheck; i++) {
isPrime = CheckPrime(i);
if (isPrime) {
primeNumbersFound = primeNumbersFound + i + " ";
}
}
System.out.println("Prime numbers from 1 to " + maxCheck + " are:");
// Print prime numbers from 1 to maxCheck
System.out.println(primeNumbersFound);
}
public static boolean CheckPrime(int numberToCheck) {
int remainder;
for (int i = 2; i <= numberToCheck / 2; i++) {
remainder = numberToCheck % i;
//if remainder is 0 then the number is not prime and we break the loop. Else continue the loop
if (remainder == 0) {
return false;
}
}
return true;
}
}
期待される出力:
1から100までの素数の出力 Java プログラム 次のようになります。
Prime numbers from 1 to 100 are: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
値2は、内側のループ条件を満たすため合格します。 i <= 2 / 2 評価する 2 <= 1これはすぐに偽となるため、このメソッドは除算を一切行わずに真を返します。
平方根境界を使用した最適化バージョン
数の半分までを割り算するのは正しいですが、不必要な作業です。平方根の周りでは常に約数がペアになっているため、√n より大きい約数には、すでにテスト済みの対応する約数が必ず存在します。
public class PrimeNumbersOptimized { public static void main(String[] args) { int maxCheck = 100; int count = 0; StringBuilder result = new StringBuilder(); for (int i = 2; i <= maxCheck; i++) { if (isPrime(i)) { result.append(i).append(" "); count++; } } System.out.println("Prime numbers from 1 to " + maxCheck + " are:"); System.out.println(result.toString().trim()); System.out.println("Total primes found: " + count); } public static boolean isPrime(int n) { if (n <= 1) return false; if (n == 2) return true; if (n % 2 == 0) return false; // test only odd divisors up to the square root for (int i = 3; i * i <= n; i += 2) { if (n % i == 0) return false; } return true; } }
出力:
Prime numbers from 1 to 100 are: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 Total primes found: 25
💡ヒント: StringBuilder はループ内の繰り返し文字列連結を置き換えます。 += 文字列に対して操作を行うと新しいオブジェクトが作成され、上限が数千に達すると計測可能になります。
プリントプライム Numbers エラトステネスの篩の使用
範囲内のすべての素数が必要な場合、試行除算は適切な方法ではありません。エラトステネスの篩はブール配列を作成し、各素数の倍数を合成数としてマークし、マークされていない残りの数を読み取ります。
この方法は3つのステップで機能します。
- サイズn+1のブール配列を作成し、2以上のインデックスはすべて素数であると仮定します。
- 2から始めて、現在の素数の倍数をすべて合成数としてマークします。
- 次の未マークのインデックスに進み、nの平方根を超えるまでこれを繰り返します。
import java.util.Arrays; public class SieveOfEratosthenes { public static void main(String[] args) { int n = 100; boolean[] composite = new boolean[n + 1]; for (int p = 2; p * p <= n; p++) { if (!composite[p]) { // start at p*p because smaller multiples are already marked for (int multiple = p * p; multiple <= n; multiple += p) { composite[multiple] = true; } } } StringBuilder result = new StringBuilder(); for (int i = 2; i <= n; i++) { if (!composite[i]) { result.append(i).append(" "); } } System.out.println("Prime numbers from 1 to " + n + " are:"); System.out.println(result.toString().trim()); } }
出力:
Prime numbers from 1 to 100 are: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
3つのアプローチの比較
3つのプログラムはすべて同じ25個の値を出力するので、選択は範囲の大きさに完全に依存します。
| アプローチ | 時間の複雑さ | 追加メモリ | ベストレンジ |
|---|---|---|---|
| n/2への試行分割 | O(n²) | O(1) | 数千まで |
| √n への試行除算 | O(n√n) | O(1) | 数十万まで |
| エラトステネスのふるい | O(n log log n) | O(N) | 何百万もの価値 |
プログラムをチェックして 任意の入力数値からの素数 範囲ではなく単一の値をテストする必要がある場合。ループ駆動の演習については、以下を参照してください。 フィボナッチ数列 Java Java 回文プログラム Bubbleソートアルゴリズム Java篩で使用されるブール配列については、以下でさらに詳しく説明します。 Java アレイ.

