関数を使って指定した区間の素数を表示するJavaプログラム
本記事では、関数を使用して指定した区間内の素数を表示する方法を解説します。素数とは、約数が「1」と「その数自身」の2つだけしか持たない特別な数であり、それ以外のどの数でも割り切ることができない数のことです。
ある数が素数であるのは、その約数が1とその数自身だけである場合です。たとえば11は素数であり、その約数は1と11のみです。素数の例としては、2、3、5、7、11、13などが挙げられます。なお、2は唯一の偶数の素数であり、それ以外の素数はすべて奇数になります。
以下に実行例を示します。
入力
入力値が次のとおりであるとします。
開始番号 : 1 終了番号 : 75
出力
期待される出力は次のとおりです。
区間1から75までの素数は次のとおりです: 1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73
アルゴリズム
ステップ1 - 処理を開始する ステップ2 - 整数型の変数 my_low、my_high を宣言する ステップ3 - ユーザーから必要な値を読み込む、または値を定義する ステップ4 - boolean値を返す関数 IsPrime を定義する。この関数は整数を受け取り、1を除く自身より小さい数で割り切れるかどうかを判定する ステップ5 - 割り切れる場合は false を返し、そうでない場合は true を返す ステップ6 - forループで my_low から my_high まで繰り返し処理を行い、各数値に対して IsPrime を呼び出す。true が返されればその数は素数として記録する ステップ7 - 結果を表示する ステップ8 - 処理を終了する
例1:ユーザーからの入力を受け取る場合
ここでは、プロンプトに従ってユーザーが値を入力します。オンラインコンパイラなどで実際に動作を試すこともできます。
import java.util.Scanner;
public class PrimeNumber {
public static void main(String[] args) {
int my_high, my_low;
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) {
if (IsPrime(my_low))
System.out.print(my_low + " ");
++my_low;
}
}
public static boolean IsPrime(int my_input) {
boolean flag = true;
for (int i = 2; i <= my_input / 2; ++i) {
if (my_input % i == 0) {
flag = false;
break;
}
}
return flag;
}
}出力
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: 1 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;
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) {
if (IsPrime(my_low))
System.out.print(my_low + " ");
++my_low;
}
}
public static boolean IsPrime(int my_input) {
boolean flag = true;
for (int i = 2; i <= my_input / 2; ++i) {
if (my_input % i == 0) {
flag = false;
break;
}
}
return flag;
}
}出力
The starting and ending numbers are defined as 1 and 75 The prime numbers between the interval 1 and 75 are: 1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73
補足:1の扱いについて
数学的な定義では、1は素数とはみなされません。しかし上記のプログラムでは、IsPrime(1) が true を返す仕様になっているため、出力結果に1が含まれます。厳密に素数のみを表示したい場合は、開始値を2に設定するか、IsPrime 関数の冒頭に「if (my_input < 2) return false;」という条件を追加するとよいでしょう。
-
【C言語】forループを使って1〜Nまでの素数をすべて表示するプログラム
問題 実行時にユーザーが入力した値nに対して、1からnの間に存在するすべての素数を表示するC言語プログラムを作成しましょう。 解決策 ここでは、forループを使用して、実行時にユーザーから与えられた値nまでの範囲内にある素数をすべて検出・表示する方法を解説します。なお、素数とは、1とその数自身以外に約数を持たない、1より大きい自然数のことです。具体的には、2、3、5、7、11、13などが該当します。 アルゴリズム 以下は、実行時にユーザーが入力した値nまでの素数をすべて表示するためのアルゴリズムです。 ステップ1 − nの値を入力として読み込む ステップ2 − カウンタ変数countを0で初
-
Javaで数の一意な素因数の積を求めるプログラム
ある整数の一意な素因数(重複しない素因数)の積を求めるためのJavaコードは以下の通りです。 例 public class Demo { public static long prime_factors(int num){ long my_prod = 1; for (int i = 2; i <= num; i++){ if (num % i == 0){ boolean is_prime = true; for (int j = 2; j <= i / 2; j