Javaで入力された数が素数かを判定するプログラムです。
素数でない数字の場合は入力値以下で最大の素数を表示します。
Main.java
import java.util.Scanner;
public class Main{
//表示される素数
static int primeNum = 0;
//入力値が素数化を判定するフラグ
static boolean isPrime = true;
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int num;
//2未満の数や整数以外の入力の際はやり直し
do {
try {
num = Integer.parseInt(sc.next());
if(num < 2) {
System.out.println("2以上の整数を入力してください。");
}
}catch(NumberFormatException e) {
System.out.println("半角整数で入力してください。");
num = 0;
}
}while(num < 2);
//素数を探す
searchPrime(num);
//表示するメッセージ
String msg = String.format("%dは素数です。", num);
if(!isPrime) {//入力値が素数ではなかった場合、メッセージを変更
msg = String.format("%dは素数ではありませんでした。近い素数は%dです。"
,num,primeNum);
}
System.out.println(msg);//表示
sc.close();
}
public static void searchPrime(int num){
if(checkPrime(num)){//素数であったなら引数をprimeNumに代入
primeNum = num;
return ;
}//素数でなかったなら一つ小さい数を調べる&素数ではなかったフラグ
isPrime = false;
searchPrime(num - 1);
}
public static boolean checkPrime(int num){
if(num < 2){//2以下ならば素数ではない
return false;
}
if(num == 2){//2ならば素数
return true;
}
if(num % 2 == 0){//偶数ならば素数ではない
return false;
}
//3以上、numの平方根以下の数で割り切れるか調べる
for(int i = 3; i <= Math.sqrt(num); i ++){
if(num % i == 0){//割り切れる場合は素数ではない
return false;
}
}
//割り切れなかった場合素数
return true;
}
}