どこよりも遅い!情報関連基礎第3問 解説
最終更新日2010年8月3日
第3問は2〜100の整数が素数であるかどうかの判定、および100の素因数分解を行う手続きの問題。問1
2〜100の整数のうち、どの数が整数であるかを判別するために以下の手順により判別表を作成する。
表1
番号 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | … | 97 | 98 | 99 | 100 |
値 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | … | 0 | 0 | 0 | 0 |
表2
番号 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | … | 97 | 98 | 99 | 100 |
値 | 2 | 0 | 2 | 0 | 2 | 0 | 2 | 0 | … | 0 | 2 | 0 | 2 |
表3
番号 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | … | 97 | 98 | 99 | 100 |
値 | 2 | 3 | 2 | 0 | 3 | 0 | 2 | 3 | … | 0 | 2 | 3 | 2 |
この手続きを行うと、値が0で最も小さい番号として素数を小さい順に選ぶことになる。このため、続いて 5の倍数の番号に対応する値の欄を5に書きかえる。さらに続いて 7の倍数の番号に対応する値の欄を7に書きかえる。
最後に書き換えが行われるのは100以下の最大の素数である97の番号に対応する値の欄である。この書き換えで、判別表が完成する。
表4
番号 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | … | 97 | 98 | 99 | 100 |
値 | 2 | 3 | 2 | 5 | 3 | 7 | 2 | 3 | … | 97 | [オ] | [カキ] | 5 |
問2.
問1の手順に基づいて、判別表を作る手続きを作製する。判定表に対応する配列を Yakusu とし、番号は Yakusu の添え字、値は Yakusu の要素で表す。判別表の初期化の手続きは以下の通りである。
(01) i を 2 から 100 まで 1 ずつ増やしながら (02) | Yakusu[i] ← 0 (03) を繰り返す |
(04) i を 2 から 100 まで 1 ずつ増やしながら | (要素が0で添え字が最小のものを探す) (05) | もし Yakusu[i] = 0 ならば(解答群の0.) (06) | | j ← i | | (j から 100 までの添え字の間で操作を行う) (07) | | j ≦ 100 の間(解答群の3.) | | (i から i ずつ加えた添え字の要素を i にする) (08) | | | Yakusu[j] ← i (09) | | | j ← j+i(解答群の8.) (10) | | をくり返す (11) | を実行する (12) をくり返す |
(01) | Yakusu を初期化する手続き。 (03) (04) | Yakusu に判別式の値を入れる手続き。 (12) (13) i を 2 から 100 まで 1 ずつ増やしながら | (添え字と要素が等しいものを探す) (14) | もし Yakusu[i] = i ならば(解答群の5.) | | (その要素を印刷する) (15) | | i を印刷する(解答群の5.) (16) | を実行する (17) をくり返す |
(01) | Yakusu を初期化する手続き。 (03) (04) | Yakusu に判別式の値を入れる手続き。 (12) (13) k ← 100 (k が 2 以上である間は手続きを行う) (14) k > 1 の間(解答群の0.) | (その要素を印刷する) (15) | Yakusu[k] を印刷する | (添え字が k/Yakusu[k] の要素を調べる) (16) | k ← k/Yakusu[k](解答群の3.) (17) をくり返す |
表4
k | 100 | → | 20 | → | 4 | → | 2 | → | 1 |
素数 | 5 | 5 | 2 | 2 | 終了 |
数学とクイズでくつろいで<数学の部屋<どこよりも遅い!センター試験数学 解説<情報関係基礎 第3問 解説