数秘術を元にある年の運勢を占うプログラムを作りました。
診断のページ
四柱推命ではたしか12ぐらいのが回っていきますね。絶とか衰、養など・・・。六星占術でもにたようなのがあります。どれが本物かはなんとも・・・。
パーソナルイヤーの計算方法
パーソナルイヤーは年月日のすべての桁の数を足して、1桁になるまで同じように足していく。これをそのまま javascript で書いたのだが、ループを使って足し算のアルゴリズムを書くよりも、割ったほうが早いということに気づいた。つまり 12345 -> 1 + 2 + 3 + 4 + 5 = 15 -> 1 + 5 = 6 とやるより 12345 -> 12345 % 9 = 6 ってこと。これについてちょっとメモ。
任意の正の整数について、すべての桁の数を足した数を求める。
求められた数について同じ作業をする(すべての桁の数を足した数を求める)。
これを、1桁の数が得られるまで繰り返したときの値は、
元の整数が9で割り切れる場合は9に等しく、そうでない場合は元の整数を9で割った余りに等しい。
まず次の3つを示す。
(1) 2桁以上の正の整数のすべての桁を足すと、計算前の数字よりも小さくなる。
(2) 任意の0以上の整数を9で割った余りは、すべての桁の数を足して9で割った余りに等しい。
(3) 任意のn桁の整数のすべての桁を足すと必ず正の数になる。
任意の $0$ 以上の $n$ 桁整数 $ A $ を次のように表す。
$$ A = \sum _{k=0} ^{n} 10^k a_k \ \ (0 \leq a_k < 10, a_k \in \mathbb{N})$$
<(1) について>
$n \geq 2 $ のとき、 $$ A - \sum _{k=0} ^{n} a_k = \sum _{k=0} ^{n} (10^k - 1) a_k > 0 .$$
<(2) について>
$$ A \equiv \sum _{k=0} ^{n} 1^k a_k \equiv \sum _{k=0} ^{n} a_k \ \ \left(\mod 9\right) $$ となるので、$A$ を $9$ で割った余りは すべての桁の数を足して9で割った余りに等しい。
<(3) について>
$a_n > 0$ により、 $$ \sum _{k=0} ^{n} a_k \gt 0 .$$
(1)より、任意の正の整数は、すべての桁の数を足すという作業を有限回繰り返すことで1桁の整数にすることができる。
(2)より、任意の正の整数は、すべての桁の数を足すという施行の前と後で9で割った余りが変わらない。
以上より、任意の正の整数について、すべての桁の数を足すという作業を1桁になるまで繰り返したとき、その1桁の数を割った余りと元の数を割った余りは等しくなる。
1桁の数について、9で割った余りが 0, 1, 2, 3, 4, 5, 6, 7, 8 になる場合、割られる1桁の数は 9, 1, 2, 3, 4, 5, 6, 7, 8 である。((3)により0になることはない。)よって、任意の正の整数について、すべての桁の数を足すという作業を、1桁の数が得られるまで繰り返したとき、その1桁の数は元の整数が9で割り切れる場合は9に等しく、そうでない場合は元の整数を9で割った余りに等しい。
MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});