問題 1  素数判定

8
1 問問 1 問問問問 問問問問問問問問問問問問問問問問問問問問問問問問問問問問問Ctrl-D 問問問問問問問問問問問問問問問% ./a.out 問問問問問問35 35 問問問問問問問問問問問問問9 9 問問問問問問問問問問問問問17 17 問問問問問問問問問問問問-9 問問問問問問問問問問問問問Ctrl-D 問問問問問問問問問問問% 問問問問問問問問問問問問問問

description

問題 1  素数判定. 入力した正の整数値が素数であるかどうかを判定するプログラム。 Ctrl-D が入力されるまで判定を繰り返す。. % ./a.out 自然数を入力: 35 35 は素数ではない。 自然数を入力: 9 9 は素数ではない。 自然数を入力: 17 17 は素数である。 自然数を入力: -9 入力エラーです。 自然数を入力: Ctrl-D プログラムを終了します。 %. この色 はプログラムによる出力. 問題 2  素因数分解. 自然数を入力し、素因数に分解するプログラムを作れ。 エラー処理も行うこと。. % ./a.out - PowerPoint PPT Presentation

Transcript of 問題 1  素数判定

Page 1: 問題  1  素数判定

1

問題 1 素数判定

入力した正の整数値が素数であるかどうかを判定するプログラム。 Ctrl-D が入力されるまで判定を繰り返す。

% ./a.out自然数を入力: 3535 は素数ではない。自然数を入力: 99 は素数ではない。自然数を入力: 1717 は素数である。自然数を入力: -9入力エラーです。自然数を入力: Ctrl-Dプログラムを終了します。%

この色はプログラムによる出力

Page 2: 問題  1  素数判定

2

問題 2 素因数分解

自然数を入力し、素因数に分解するプログラムを作れ。エラー処理も行うこと。

% ./a.out自然数を入力: 2424 = 2*2*2*3% ./a.out自然数を入力: 144144 = 2*2*2*2*3*3% ./a.out自然数を入力: -9入力エラー%

この色はプログラムによる出力

Page 3: 問題  1  素数判定

3

問題 3 最大公約数

ユークリッドの互除法を用いて、入力した 2 つの自然数の最大公約数を求めるプログラムを作れ。

% ./a.out自然数を 2 つ入力: 54 144144 と 54 の最大公約数は 18 です。%

この色はプログラムによる出力

Page 4: 問題  1  素数判定

4

問題 4 完全数

完全数とは、約数(自分自身は除く)の和が自身と等しい自然数である。

例) 6 の約数は 1, 2, 3 であり、 1 + 2 + 3 == 6 であるので、 6 は完全数。

6, 28, 496, 8128 は完全数である。

可能な限りたくさんの完全数を探すプログラムを作れ。

% ./a.out見つけた! 6見つけた! 28見つけた! 496見つけた! 8128...%

プログラム実行結果の表示

ヒント: a が完全数かどうかを判定する部分を作成。    これを a に関するループで囲めば良い。

Page 5: 問題  1  素数判定

5

約数の和を求める

約数の和を求めるには、1から始めて、順に割っていき、割り切れた数の合計を求めればよい。

int goukei = 0;int i, n; n=280; // たとえば、 280 の約数の和を求める

for(i=1; i < n; i++){ if( n%i == 0) goukei += i}printf(“%d の約数の和は %d \n", n,goukei);

Page 6: 問題  1  素数判定

6

問題 5 借金の返済

年率 r で x 円を借りる。返済は毎年 y 円返していくことにする。一年後から完済するまで、毎年の返済額、残額、返済額の合計を表示するプログラムを作れ。利息は複利で計算するものとする。

% ./a.out借用金額を入力: 1000000利率を入力 (%) : 3.0毎年の返済額を入力: 100000借用金額 1000000 円、毎年の返済額 100000, 利率 3.00% 1年目 , 返済金 100000 円 , 残金 930000 円 , 返済額 100000 円 2年目 , 返済金 100000 円 , 残金 857900 円 , 返済額 200000 円        ............12 年目 , 返済金 100000 円 , 残金 6558 円 , 返済額 1200000 円13 年目 , 返済金 6755 円 , 返済金の総額 1206755 円%

プログラム実行結果の表示

一年後の借金の総額は       x (1+r/100)である、これから y を引いた金額が残金である。二年目以降も、残金に      ( 1+r/100)を掛けた金額が借金の総額で、これから y を引いた金額が残額である。借金の総額が y 以下であれば、返済が完了する。 y 円を返済して終了する l 。

Page 7: 問題  1  素数判定

7

繰り返しの考え方

1) x,y,r を入力する2) x=x*(1+r/100) ;1年度後の借金額3)もし y >= x なら x 円を返済して終了4) x = x−y ;           返済後の借金の残額5) x = x *(1+ r /100);1年度の借金額6)もし y >= x なら x 円を返済して終了7) x = x−y ;    。。。。。。。これを続ける

この範囲を繰り返す

繰り返すのは、2)〜4)の間。しかしこれでは、繰り返しの終了判定が3)で、繰り返しの途中になる。 (break 文を使えば、途中での終了も可能)

あ)  while での繰り返しの終了判定は、繰り返しの最初におこなう。い)  do 〜 while では繰り返しの最後に行う。

あ)の場合は、3)から5)を繰り返す。い)の場合は、4)から6)を繰り返す。

Page 8: 問題  1  素数判定

8

x,y,r を入力するx=x*(1+r/100) ;1年度後の借金額while (y < x) { x = x−y ;           返済後の借金の残額

y 円を返済して、返済後の借金額は x 円 x = x *(1+ r /100);1年度の借金額}if (x > 0) x 円を返済

あ)の場合

い)の場合x,y,r を入力するx=x*(1+r/100) ;1年度後の借金額if (y < x) { do { x = x−y ;           返済後の借金の残額                 y 円を返済して、返済後の借金額は x 円 x = x *(1+ r /100);1年度の借金額 } while (y < x);}if (x > 0) x 円を返済