3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

素数を判定

Posted at

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

3
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?