| 1 |
#include <stdio.h> |
〔プログラムの説明〕
(1) 自然数num(num≧2)を素因数に分解し,結果を次
の例のように印字するプログラムである。
例 1.自然数12 を入力した場合
数値(2 以上の自然数)を入力してください。:12
12 = 2 × 2 × 3
例 2.自然数3 を入力した場合
数値(2 以上の自然数)を入力してください。: 3
3 = 素数
(2) 素因数分解及び素数の判定手順は,次のとおりである。
@ 変数factor の値を2 から始めて1 ずつ増やしな
がら, num を factor で割った結果がfactor 以
上である間,Aを実行する。
A num が factorで割り切れる場合,次の処理をnum
が factor で割り切れなくなるまで繰り返す。
(a) factor の値を素因数として抽出する。
(b) num を factor で割った商を新たなnum とする。
B 最終的に割り切るfactor がなかった場合には,
num は素数であると判定する。
(3) このプログラムでは,(2) の手順@ での繰返し処理の
回数を減らすために,まず最初に自然数num が 2 の倍
数であるかどうかを判定する。num が 2 の倍数の場合
には,(2)の手順A によって,最初に2 の因子をすべて
抽出する。続いて,変数factor の値を,3 から始めて
2 ずつ増やしながら, num を factor で割った結果が
factor 以上である間,素因数の抽出を繰り返す。
|
| 2 |
#define TRUE 1 |
| 3 |
#define FALSE 0 |
| 4 |
main() |
| 5 |
{ |
| 6 |
int num, prime = TRUE, factor = 2; |
| 7 |
printf( "数値(2 以上の自然数)を入力してください。: " ); |
| 8 |
scanf( "%d", &num ); |
| 9 |
printf( "%d =", num ); |
| 10 |
if ( num != factor ) |
| 11 |
while ( num % factor == 0 ) { /*数値が2 の倍数? */ |
| 12 |
if ( prime == FALSE ) printf( " ×" ); |
| 13 |
printf( " %d", factor ); |
| 14 |
【 a 】 ; |
| 15 |
prime = FALSE; |
| 16 |
} |
| 17 |
factor++; |
| 18 |
while (【 b 】) { |
| 19 |
while ( num % factor == 0 ) { |
| 20 |
if ( prime == FALSE ) printf( " ×" ); |
| 21 |
printf( " %d", factor ); |
| 22 |
【 a 】 ; |
| 23 |
prime = FALSE; |
| 24 |
} |
| 25 |
【 c 】 ; |
| 26 |
} |
| 27 |
if ( prime == TRUE ) printf( " 素数\n" ); |
| 28 |
else if ( num > 1 ) printf( " × %d\n", 【 d 】 ); |
| 29 |
else printf( "\n" ); |
| 30 |
} |
| |
設問 プログラム中の【 】に入れる正しい答えを,
解答群の中から選べ。
a,c に関する解答群
ア factor--
イ factor += 2
ウ num /= factor
エ num %= factor
オ prime = FALSE
カ prime = TRUE
b に関する解答群
ア num / factor >= factor
イ num % factor != 0
ウ prime == FALSE
エ prime == TRUE
d に関する解答群
ア factor
イ num / factor
ウ num % factor
エ num
オ prime |