Table of Contents
数秘術を元にある年の運勢を占うプログラムを作りました。
パーソナルイヤーの計算方法
パーソナルイヤーは年月日のすべての桁の数を足して、1桁になるまで同じように足して得られる結果です。
たとえば の場合は 1 + 9 + 8 + 6 + 1 + 2 + 8 = 35 、 3 + 5 = 8 というように計算します。
パーソナルイヤーを計算するプログラム
年月日を上述のように足してもいいのですが、 ループを使って足し算のアルゴリズムを書くよりも、割ったほうが楽にできます。 1986年10月28日 の場合は、 1986 % 9 + 1 % 9 + 28 % 9
や 1986128 % 9
で計算できます。
仕組み
任意の正の整数について、すべての桁の数を足した数を求めます。 求められた数について同じ作業をします(すべての桁の数を足した数を求める)。 これを、1桁の数が得られるまで繰り返したときの値は、元の整数が9で割り切れる場合は9に等しく、そうでない場合は元の整数を9で割った余りに等しくなります。
そのため、上のように9で割ってもほしい答えが得られるようになっています。
証明
証明すべきことは次の3つです。
- 有限回の作業で1桁の正整数にできる
- 得られた1桁の正整数と元の数をそれぞれ9で割った余りは等しい
- 9で割った余りと足して得られた1桁の数は等しい(余りが 0 の場合は 9 が得られる)
すべての桁の数を足す作業を “作業P” と表すことにします。
任意の 0 以上の n 桁整数 A を次のように表します。
A=n∑k=010kak(0≤ak<10,ak∈N)(1) 2桁以上の正の整数のすべての桁を足すと、計算前の数字よりも小さくなる
操作Pを行ったときに、大きな数ができると作業が永遠に終わりませんから、 操作を行うことで小さな数が得られることを確認します。
n≥2 のとき、
A–n∑k=0ak=n∑k=0(10k–1)ak>0.(2) 任意のn桁の正整数のすべての桁を足すと必ず正の数になる
操作Pによって0以下の数ができると割り算が厄介です。 そうならないことを確認しておきます。
an>0 により、
n∑k=0ak>0.以上より、任意の正の整数は、作業Pを有限回繰り返すことで1桁の整数にすることができます。
(3) 任意の0以上の整数を9で割った余りは、すべての桁の数を足して9で割った余りに等しい。
A≡n∑k=01kak≡n∑k=0ak (modとなるので、A を 9 で割った余りは すべての桁の数を足して9で割った余りに等しくなります。
この法則は九去法でも使われています。 九去法は検算の方法
(3) を有限回適用することで、 任意の0以上の整数を9で割った余りが、作業Pを繰り返してできた1桁の正整数を9で割った余りに等しいことがわかります。
1桁の数について、9で割った余りが 0, 1, 2, 3, 4, 5, 6, 7, 8 になる場合、 割られる1桁の数は 9, 1, 2, 3, 4, 5, 6, 7, 8 です((3)により0になることはない)。 よって、任意の正の整数について、作業Pを、1桁の数が得られるまで繰り返したとき、その1桁の数は元の整数が9で割り切れる場合は9に等しく、そうでない場合は元の整数を9で割った余りに等しくなります。