からまでの正整数に対して、コラッツ予想の手続きでにたどり着くまでの総ステップ数、倍してを足す回数、で割る回数の表を出力するプログラムを書け。
| 最初の数 | 総ステップ数 | 2で割る回数 | 3倍して1を足す回数 |
|---|---|---|---|
| 1 | 0 | 0 | 0 |
| 2 | 1 | 0 | 1 |
| 3 | 7 | 2 | 5 |
| 4 | 2 | 0 | 2 |
| 5 | 5 | 1 | 4 |
| 6 | 8 | 2 | 6 |
| 7 | 16 | 5 | 11 |
| 8 | 3 | 0 | 3 |
| 9 | 19 | 6 | 13 |
| 10 | 6 | 1 | 5 |
| 11 | 14 | 4 | 10 |
| 12 | 9 | 2 | 7 |
| 13 | 9 | 2 | 7 |
| 14 | 17 | 5 | 12 |
| 15 | 17 | 5 | 12 |
| 16 | 4 | 0 | 4 |
| 17 | 12 | 3 | 9 |
| 18 | 20 | 6 | 14 |
| 19 | 20 | 6 | 14 |
| 20 | 7 | 1 | 6 |
| 21 | 7 | 1 | 6 |
| 22 | 15 | 4 | 11 |
| 23 | 15 | 4 | 11 |
| 24 | 10 | 2 | 8 |
| 25 | 23 | 7 | 16 |
| 26 | 10 | 2 | 8 |
| 27 | 111 | 41 | 70 |
| 28 | 18 | 5 | 13 |
| 29 | 18 | 5 | 13 |
| 30 | 18 | 5 | 13 |
| 31 | 106 | 39 | 67 |
| 32 | 5 | 0 | 5 |
| 33 | 26 | 8 | 18 |
| 34 | 13 | 3 | 10 |
| 35 | 13 | 3 | 10 |
| 36 | 21 | 6 | 15 |
| 37 | 21 | 6 | 15 |
| 38 | 21 | 6 | 15 |
| 39 | 34 | 11 | 23 |
| 40 | 8 | 1 | 7 |
| 41 | 109 | 40 | 69 |
| 42 | 8 | 1 | 7 |
| 43 | 29 | 9 | 20 |
| 44 | 16 | 4 | 12 |
| 45 | 16 | 4 | 12 |
| 46 | 16 | 4 | 12 |
| 47 | 104 | 38 | 66 |
| 48 | 11 | 2 | 9 |
| 49 | 24 | 7 | 17 |
| 50 | 24 | 7 | 17 |
| 51 | 24 | 7 | 17 |
| 52 | 11 | 2 | 9 |
| 53 | 11 | 2 | 9 |
| 54 | 112 | 41 | 71 |
| 55 | 112 | 41 | 71 |
| 56 | 19 | 5 | 14 |
| 57 | 32 | 10 | 22 |
| 58 | 19 | 5 | 14 |
| 59 | 32 | 10 | 22 |
| 60 | 19 | 5 | 14 |
| 61 | 19 | 5 | 14 |
| 62 | 107 | 39 | 68 |
| 63 | 107 | 39 | 68 |
| 64 | 6 | 0 | 6 |
| 65 | 27 | 8 | 19 |
| 66 | 27 | 8 | 19 |
| 67 | 27 | 8 | 19 |
| 68 | 14 | 3 | 11 |
| 69 | 14 | 3 | 11 |
| 70 | 14 | 3 | 11 |
| 71 | 102 | 37 | 65 |
| 72 | 22 | 6 | 16 |
| 73 | 115 | 42 | 73 |
| 74 | 22 | 6 | 16 |
| 75 | 14 | 3 | 11 |
| 76 | 22 | 6 | 16 |
| 77 | 22 | 6 | 16 |
| 78 | 35 | 11 | 24 |
| 79 | 35 | 11 | 24 |
| 80 | 9 | 1 | 8 |
| 81 | 22 | 6 | 16 |
| 82 | 110 | 40 | 70 |
| 83 | 110 | 40 | 70 |
| 84 | 9 | 1 | 8 |
| 85 | 9 | 1 | 8 |
| 86 | 30 | 9 | 21 |
| 87 | 30 | 9 | 21 |
| 88 | 17 | 4 | 13 |
| 89 | 30 | 9 | 21 |
| 90 | 17 | 4 | 13 |
| 91 | 92 | 33 | 59 |
| 92 | 17 | 4 | 13 |
| 93 | 17 | 4 | 13 |
| 94 | 105 | 38 | 67 |
| 95 | 105 | 38 | 67 |
| 96 | 12 | 2 | 10 |
| 97 | 118 | 43 | 75 |
| 98 | 25 | 7 | 18 |
| 99 | 25 | 7 | 18 |
正整数 の約数の総和を とする。たとえば、 の約数は , , , , , の6個なので、 である。
正整数 を入力して、 を出力するプログラムを書け。
正整数 の約数の個数を とする。たとえば、 の約数は , , , , , の6個なので、 である。
正整数 を入力して、 を出力するプログラムを書け。
浮動小数点数
と整数
をこの順に入力し、以下の計算をして結果を出力するプログラムを書け。ただし、入力値が条件に合わない場合は、プログラムは何も出力せずに終了せよ。なお、出力は小数点以下8桁で ?.????????e±?? の形式(printfで %.8e を使うと良い)で行うこと。
(二次元) かつ のとき、辺の長さが の正角形に対して、以下の四つを計算して出力するプログラムを書け。
(三次元) かつ のとき、辺の長さが の正面体に対して、以下の四つを計算して出力するプログラムを書け。
(四次元) かつ のとき、辺の長さが の正胞体に対して、以下の四つを計算して出力するプログラムを書け。
Cの三角関数はラジアンです。
円周率の近似値として は粗すぎです。
Cで円周率の近似値を計算する方法の一つは、
atan(1)*4
です。
を利用して
を計算します。
atan
はCの標準関数の一つで、逆正接関数
を計算します。
と を正の実数とする。 と の大きい方を とし、 と の小さい方を とする。 と の算術平均(相加平均)を とし、 と の幾何平均(相乗平均)を とする。 と の算術平均を とし、 と の幾何平均を とする。 と の算術平均を とし、 と の幾何平均を とする。 以下、これを無限に繰り返す。 すなわち、数列 と を以下の漸化式で定義する。
このとき、数列 と は同じ値に収束することが知られている。共通の極限値を と の算術幾何平均と呼ぶ。
二つの浮動小数点数 と を入力して、以下のように定める と と を出力するプログラムを書け。 と の算術幾何平均を とする。 と の算術幾何平均を とする。 と の算術幾何平均を とする。
入力は も も正であると仮定して良い。出力は小数点以下12桁の小数表示で行い、1行に空白区切りで三つの数を上記の順で並べること。
目標誤差 を事前に決めておいて、 となった時点で計算を打ち切れば良い。なお、目標誤差 の決め方には『入門書のようなもの(仮)』§1.5.1 にある浮動小数点数の精度の説明が参考になるかもしれない。
のとき、 で が成り立つことが、証明できる。すなわち、算術平均の計算と幾何平均の計算を 回繰り返せば、算術幾何平均との誤差は 未満にできる。
この事実は、目標誤差以下を達成するために十分な繰り返し回数を事前にすることに利用できる。すなわち、 の値を毎回評価して十分小さくなったら計算を打ち切るのではなく、事前に見積もった回数だけ繰り返す形でプログラムを書くことができる。 目標誤差が の場合、不等式 を解けば十分な繰り返し回数がわかる。すなわち、繰り返し回数 が をみたせば良い。
| 1.000000000000 | 2.000000000000 | 1.456791031047 | 1.217662201672 | 1.717641883408 |
| 2.000000000000 | 3.000000000000 | 2.474680436236 | 2.231023598499 | 2.731021157480 |
| 3.000000000000 | 7.000000000000 | 4.789013583141 | 3.842271024705 | 5.842092968071 |