鍋あり谷あり

テーマを決めずに適当に書いています。

憶えておくといい数

d:id:debedebe:20071021
を読んで。

私自身は、真分数の小数表示が役に立つとはあんまり思ってない。小数の計算は人間がやるもんじゃないと思ってるからだと思う。
1〜20の自乗、1〜9の三乗は便利だと思う。憶えてないけど。
2の整数乗は、2**24=16777216まで憶えているが、2**20より上が役に立ったことはないと思う。2**10 までは必ず役に立つ。2**16 以下もたまには役に立ちそうだと思う。それとは別に、多倍長整数が普通ではない世界に住んでいる人は、2**32 がだいたいどれくらいかは知っておく必要がある。ruby 以外使わないし、バイナリで数字を書く事なんてないって人には不要なのかな。

で。

九九のかけ算なんて、足し算四回でできるので、九九を憶えてなくても百倍ぐらいの時間で計算できると思う。一方。49が7×7であることに気づくのには、憶えてないと、一万倍以上の時間がかかると思う。
で。数を憶えて素因数分解を高速化したい。
しかし。

  • かけ算九九を憶えている
  • 2・3・5・11の倍数を識別できる

ということであれば、100までの合成数はまあまあすぐに素因数分解できる。たったひとつの例外を除いて。
その例外は:

7×13=91

というわけで。
かけ算九九の次は、7×13=91 を憶えよう。そうすれば、100以下の数はまあまあすぐに素因数分解できるし、素数かどうかもすぐにわかる。
つまり:

  • 100以下
  • 九九に出てこない
  • 2・3・5・11のいずれでも割り切れない
  • 91でない

なら素数だとわかる。

次に。
約数の多い数を憶えておくといいと思う。これにはあんまり根拠がないんだが、役に立ったことが多い気がする。
具体的には。
紙の下端中心に 1 と書く。右に行くと2倍。左に行くと5倍。上に行くと3倍。となるように数を書き足していく。この表を、1000を超えないところまで埋め、そこに出てくる数字を憶えるといいと思う。その表を憶えたら、下端中心に7を書いた表も憶える。

というわけで、問題。
上記の表を出力するプログラムを書け。