読者です 読者をやめる 読者になる 読者になる

ブルーマン総合研究所

レポートはこまめに取るようポケモンで学んだでしょ!

【"2017"年だし!】javaで"素数"判定



2017年。

 

今日で早くも1月が終わろうとしています。

 

2017といえば、、、、素数

はい、素数を判定するプログラムを作っていきましょー!(^O^)/(超強引)

 

そもそも、素数とは何なのか、、、、

素数とは、1より大きい自然数で、正の約数が1と自分自身のみであるもののことである。 by Wikipedia先生

 へー (゚σ_゚)ホジホジ

 

プログラムに落とし込むための条件を深掘りするとこんな感じですかね!


  1. 自然数(正の整数)のみ判定
  2. "1"は素数でない
  3. 最初に登場する合成数(約数を持つ数)は"4"
  4. 最小の素数は"2"
  5. ("1"を除いて)約数の最小単位は素数
  6. 4,5.の裏を返せば対象数の最大約数は(対象数÷2)を超えることはない
  7. "4"以上で素数でない数は、"2"以上の約数を持つ(=必ず"2"以上の自然数で割り切れる=余りが生じない)

 

今回はBoolean(真偽のバイナリ)を用いて、「素数は真(true)」「素数じゃなければ偽(false)」と振り分けることにします。

また追加機能として、素数じゃない時はその最小約数も表示してくれるようにしてみました!

 

※PC閲覧推奨。スマホへのグリッドに適応できていません…涙

import java.util.Scanner;
public class PrimeNumber {
	public static void main(String[] args) throws Exception{		
		try {
			System.out.println("素数判定じゃζ(@д@)ζ");
			Scanner sc = new Scanner(System.in);
			int number = sc.nextInt();
			if(number < 1) {
				System.out.println("素数は自然数ということも知らないのかい…( ´,_ゝ`)");
				return;
			}
			int divisor = 2;
			boolean prime = true;
			
			if(number == 1) {
				prime = false;
			} else if(number >= 4) {
				while(true) {
					if(divisor > number/2){
						break;
					}
					if(number%divisor == 0) {
						prime = false;
						break;
					}
					divisor++;
				}
			}
			
			if(prime == true) {
				System.out.println(number + "は素数DEATH!");
			} else if(number != 1) {
				System.out.println(number + "は約数があるぞ!例えば" + divisor + "じゃ!");
			} else {
				System.out.println(number + "が素数だとそれ以外の素数が成り立たなくなるんじゃ…");
			}
		} catch(Exception e) {
			System.out.println("整数以外は入力するなっつってんだろぉぉ(`・ω・´)");
		}
	}
}

 

では実際に動かしてみます!

巷では廃止になるのでは?と囁かれているコマンドプロンプトで実行していきます笑

 

f:id:blueMountLab:20170131050336p:plain

 

 

・"1"の場合

f:id:blueMountLab:20170131051340p:plain

なるほどー(ググりながら)(゚σ_゚)ホジホジ

 

・"2"の場合

f:id:blueMountLab:20170131052012p:plain

ちゃんと2は素数DEATHね~()

 

・"4"の場合

f:id:blueMountLab:20170131052404p:plain

お!結果と共に追加機能である約数を表示できていますね!

 

・今日の本題、"2017"の場合

f:id:blueMountLab:20170131053006p:plain

ちゃんと2017は素数だと判定できました!(安堵)

 

さて、せっかく計算の達人・コンピュータに計算をさせていますし

デカい値素数判定をしていきましょうか( `ー´)ノ

 

素数一覧(〜1000万)

この素数一覧ページから値を拝借致します。

 

当然見るは最後の値!

9999991

さぁどうだ!

f:id:blueMountLab:20170131054542p:plain

おぉぉぉ、ちゃんと素数判定できたぁぁぁヽ(^o^)丿

 

ちなみにその一つ前の奇数(9999989)は一覧には載っていませんがどうでしょう

f:id:blueMountLab:20170131055535p:plain

ちゃんと割れましたね~。これぞまさにコンピュータのなせる技ですな!

 

ということで、

以上、(intの数値範囲内での)素数判定プログラムでした~(^O^)/