2023.01.03
数学
N番目の素数
以下の表は、1から10番目の素数を出力した例です。
順番 | 素数 |
---|---|
1 | 2 |
2 | 3 |
3 | 5 |
4 | 7 |
5 | 11 |
6 | 13 |
7 | 17 |
8 | 19 |
9 | 23 |
10 | 29 |
Javaのソースコード
PrimeNumber3.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062
public class PrimeNumber3 { // 素数判定メソッド private static boolean isPrimeNumber( int num ) { // 1以下は素数ではない if ( 1 >= num ) return false; // 2の場合は素数 if ( 2 == num ) return true; // 素数判定 int n = (int)Math.sqrt( num ); for ( int i = 2; i <= n; ++ i ) { // 余り0で割り切れるかを判定 if ( 0 == ( num % i ) ) return false; } // numが2~nで割り切れなかったので素数 return true; } // メイン public static void main( String[] args ) { // 変数の宣言 int outputnumber; // 出力する素数の個数 // 入力した引数が1つ以上かを調べる if ( 1 > args.length ) { // 入力した引数が1つ未満の場合、使用方法を表示する System.out.println( "PrimeNumber3 [出力する素数の個数]" ); return; } // 引数をint型に変換しoutputnumberに代入 try { outputnumber = Integer.parseInt( args[ 0 ] ); } catch( NumberFormatException ne ) { // args[0]が数字ではない System.out.println( "[出力する素数の個数]の取得に失敗しました" ); return; } // 素数の表を作成 int no = 0; // 出力した素数の個数 for ( int number = 1; ; number++ ) { // 素数かどうかを判定 if ( isPrimeNumber( number ) ) { // 出力した素数の個数に1を足す no++; // no番目の素数をコンソール出力 System.out.println( no + " " + number ); // 出力した素数の数noがoutputnumber以上でループを抜ける if ( no >= outputnumber ) break; } } } }
実行結果
実行
java PrimeNumber3 50
出力結果
1 2 2 3 3 5 4 7 5 11 6 13 7 17 8 19 9 23 10 29 11 31 12 37 13 41 14 43 15 47 16 53 17 59 18 61 19 67 20 71 21 73 22 79 23 83 24 89 25 97 26 101 27 103 28 107 29 109 30 113 31 127 32 131 33 137 34 139 35 149 36 151 37 157 38 163 39 167 40 173 41 179 42 181 43 191 44 193 45 197 46 199 47 211 48 223 49 227 50 229
Javaソースコードの解説
001
public class PrimeNumber3 {
クラス名を、PrimeNumber3としています。
003
private static boolean isPrimeNumber( int num )
005 006
// 1以下は素数ではない
if ( 1 >= num ) return false;
008 009
// 2の場合は素数
if ( 2 == num ) return true;
011 012 013 014 015 016
// 素数判定 int n = (int)Math.sqrt( num ); for ( int i = 2; i <= n; ++ i ) { // 余り0で割り切れるかを判定 if ( 0 == ( num % i ) ) return false; }
018 019
// numが2~nで割り切れなかったので素数 return true;
023 024
// メイン public static void main( String[] args ) {
このmainメソッドからプログラムを実行します。
025 026
// 変数の宣言 int outputnumber; // 出力する素数の個数
028 029 030 031 032 033
// 入力した引数が1つ以上かを調べる if ( 1 > args.length ) { // 入力した引数が1つ未満の場合、使用方法を表示する System.out.println( "PrimeNumber3 [出力する素数の個数]" ); return; }
035 036 037 038 039 040 041 042 043 044
// 引数をint型に変換しoutputnumberに代入 try { outputnumber = Integer.parseInt( args[ 0 ] ); } catch( NumberFormatException ne ) { // args[0]が数字ではない System.out.println( "[出力する素数の個数]の取得に失敗しました" ); return; }
046 047
// 素数の表を作成 int no = 0; // 出力した素数の個数
048
for ( int number = 1; ; number++ ) {
049 050
// 素数かどうかを判定
if ( isPrimeNumber( number ) ) {
051
// 出力した素数の個数に1を足す
054 055
// no番目の素数をコンソール出力 System.out.println( no + " " + number );
057 058
// 出力した素数の数noがoutputnumber以上でループを抜ける
if ( no >= outputnumber ) break;
以上です。