Java

素数を判定

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;
    }
}