の偶奇について考えたのは、2013年頃の話で、当時の結論は、
の値はビット演算子を用いて
n == ( r | (n - r) )
となる。
というものだ。例えば、は偶数だが、
( 10 | 11 ) = 11
は101ではないので、命題は偽となり、値は0となる。または奇数だが、
( 10 | 100 ) ) = 110
により命題は真となり、値は1となる。という具合である。
この方法なら、大きな数に対する二項係数の偶奇もあっという間に計算できる。
何故、これで良いのかについて書こう。
(1) が持つ素因数2の個数
は
である。
ちなみに、これはを2進数表示したときの
の位の数を
とし、
が
桁の2進数するとき、
と表現できる。
(2) である。これは一般に
または
となることからわかる。
(3) の等号成立は
が任意の
について成立することだから、
が大きい順に考えていくと、任意の
について
が成立することである。つまり、2進数における
の筆算において繰り上がりが生じないことが必要十分条件となる。
(4)繰り上がりが生じない2進数の筆算においては、の3つしか登場せず、
は登場しない。よって、足し算とビット毎の or 演算が等価となる。つまりビット演算子「OR」を用いて
OR
と表現することができる。XOR でも構わない。
(5) が奇数である必要十分条件は
であるから
OR
となる。
(2019.1.12追記)
spherical-harmonics.hatenablog.com
により、
(6) この条件は XOR
XOR
=0 となる。