読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

(1) 完全数をしらみつぶしに探してみる。

数学から得られる喜びって何でしょう?
私にとっては、囲碁と似ています。問題が解けたときの小さな快感。不思議な形に出会ったときの神秘さ。わからないなりにも感じるプロ棋士棋譜のすごさ。囲碁には失礼な言い方ですが、プラスαで数学は実社会でも役に立つことがたまにあります。
でも、アマチュアにとって一番数学が楽しいのは過去の偉人の成し遂げたことをなぞることじゃないでしょうか。道なき道を案内してもらって素晴らしい景色を見せてもらえるような。

オイラー入門 (シュプリンガー数学リーディングス)

オイラー入門 (シュプリンガー数学リーディングス)

そんな想いで、上の本をMaximaを使いながらなぞってみます。Eulerシリーズ、始まりです。

完全数

完全数とは、その真の約数の和がその数自身に等しいものである。

10000までの完全数を求めてみましょう。

for n : 2 thru 10000 do
  if divsum(n) - n = n then print(n, factor(n), divisors(n))$

使用した機能

完全数を表示するだけでなく、素因数分解の結果と約数の集合も表示されてみました。

10000までの完全数を求めましたが、実は10000000までの完全数も同じものしかありません。上のスクリプトを変更して試してみてください。(10分ほどかかります。)
コンピュータがない時代にはこんな全部調べるということは誰にもできなかったはずです。でも、Eulerはもっと大きな完全数を知っていました。素因数分解された形を見ると、何か感じるものがありますね。
(つづく)