Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaで2つの区間の間にある素数を表示するプログラム


この記事では、指定した2つの区間(範囲)の間にある素数を表示するJavaプログラムの作成方法について解説します。素数とは、1とその数自身の2つだけを約数に持ち、それ以外のどの数でも割り切ることのできない特別な数です。

ある数が素数であるのは、その約数が1とその数自身だけである場合です。たとえば11は素数であり、その約数は1と11のみです。素数の例としては、2、3、5、7、11、13などが挙げられます。なお、2は唯一の偶数の素数であり、それ以外の素数はすべて奇数になります。

実行例

以下に入力と出力の例を示します。

入力

入力値が次のとおりであるとします。

開始番号 : 1
終了番号 : 75

出力

期待される出力は次のとおりです。

区間1から75までの素数は次のとおりです:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73

アルゴリズム

ステップ1 - 開始
ステップ2 - 必要な変数を宣言する
ステップ3 - ユーザーから値を入力する、または値を定義する
ステップ4 - 下限値から上限値までの間でwhileループを実行する
ステップ5 - forループで区間内の各数値を順に調べ、1以外のより小さい数で割り切れるかどうかを確認し、結果を保持する
ステップ6 - 結果を表示する
ステップ7 - 終了

例1:ユーザーから入力を受け取る場合

この例では、Scannerクラスを使ってプロンプト経由でユーザーの入力を受け付けます。オンラインのJava実行環境(コーディンググラウンド)などでも実際に動作を試すことができます。

import java.util.Scanner;
public class PrimeNumber {
   public static void main(String[] args) {
      int my_high, my_low, i;
      boolean my_temp;
      System.out.println("Required packages have been imported");
      Scanner my_scanner = new Scanner(System.in);
      System.out.println("A reader object has been defined ");
      System.out.print("Enter the starting number : ");
      my_low = my_scanner.nextInt();
      System.out.print("Enter an ending Number: ");
      my_high = my_scanner.nextInt();
      System.out.println("The prime numbers between the interval " + my_low + " and " + my_high + " are:");
      while (my_low < my_high) {
         my_temp = false;
         for(i = 2; i <= my_low/2; ++i) {
            if(my_low % i == 0) {
               my_temp = true;
               break;
            }
         }
         if (!my_temp && my_low != 0 && my_low != 1)
            System.out.print(my_low + " ");
         ++my_low;
      }
   }
}

出力

Required packages have been imported
A reader object has been defined
Enter the starting number : 1
Enter the ending number : 75
The prime numbers between the interval 1 and 75 are:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73

例2:値を事前に定義する場合

この例では、整数値があらかじめ定義されており、その値を取得してコンソールに表示します。入力処理が不要になるため、ロジックの動作確認に便利です。

public class PrimeNumber {
   public static void main(String[] args) {
      int my_high, my_low, i;
      boolean my_temp;
      my_low = 1;
      my_high = 75;
      System.out.println("The starting and ending numbers are defined as " + my_low + " and " + my_high);
      System.out.println("The prime numbers between the interval " + my_low + " and " + my_high + " are:");
      while (my_low < my_high) {
         my_temp = false;
         for(i = 2; i <= my_low/2; ++i) {
            if(my_low % i == 0) {
               my_temp = true;
               break;
            }
         }
         if (!my_temp && my_low != 0 && my_low != 1)
            System.out.print(my_low + " ");
         ++my_low;
      }
   }
}

出力

The starting and ending numbers are defined as 1 and 75
The prime numbers between the interval 1 and 75 are:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73

プログラムのポイント

素数判定の仕組み

このプログラムでは、各数値に対して2から「その数の半分」までの整数で順番に割り算を行い、1つでも割り切れる数があれば素数ではないと判断しています。割り切れる数が見つかった時点でboolean型のフラグ(my_temp)をtrueにし、breakでループを抜けることで無駄な計算を省いています。

0と1の扱い

0と1は定義上素数ではないため、my_low != 0 && my_low != 1という条件で除外しています。そのため、開始番号が1であっても出力される最小の素数は2になります。

効率をさらに高めるには

より大きな範囲を扱う場合は、割る数の上限を「その数の半分」ではなく「その数の平方根(√n)」までにすると、判定回数を大幅に減らせます。また、エラトステネスのふるいなどのアルゴリズムを使えば、広い範囲の素数をさらに高速に求めることも可能です。

  1. 【C言語】forループを使って1〜Nまでの素数をすべて表示するプログラム

    問題 実行時にユーザーが入力した値nに対して、1からnの間に存在するすべての素数を表示するC言語プログラムを作成しましょう。 解決策 ここでは、forループを使用して、実行時にユーザーから与えられた値nまでの範囲内にある素数をすべて検出・表示する方法を解説します。なお、素数とは、1とその数自身以外に約数を持たない、1より大きい自然数のことです。具体的には、2、3、5、7、11、13などが該当します。 アルゴリズム 以下は、実行時にユーザーが入力した値nまでの素数をすべて表示するためのアルゴリズムです。 ステップ1 − nの値を入力として読み込む ステップ2 − カウンタ変数countを0で初

  2. Javaで2つの数の公約数の個数を求めるプログラムの書き方

    この記事では、Javaを使って2つの整数の公約数(共通の約数)の個数を求めるプログラムを紹介します。再帰処理によるユークリッドの互除法で最大公約数(GCD)を計算し、その約数を効率よく数える手法を、サンプルコードとともにわかりやすく解説します。 サンプルコード public class Demo{ static int find_gcd(int val_1, int val_2){ if (val_1 == 0) return val_2; return find_gcd(val_2%val_1,val_1); } sta