結論から言えば、ビット演算子を用いて
bitCount( n ^ r ^ (n-r) )
となる。ここで bitCount は引数の2進数表示における1の個数である。
「二項係数の偶奇」という記事で説明したことから直ちに2で割れる回数は
が成り立つ場所の個数に一致することがわかる。
つまり、
が2で何回割れるかはを2進数で足し算を行なったときに生ずる繰り上がりの回数に一致する。
例えば、において、の計算で繰り上がりが3ヶ所で生じている。
一般に2つの2進数の計算において、2進数に繰り上がりが生じたとき、その1つ上の位の計算は最大3つの和となるので、二重に繰り上がりは生じない、つまり、の2進数での桁数をとすると、の計算の繰り上がりの数は最大なので、がで割り切れることはありえないことがわかる。
例えば、は5桁の2進数なので、がで割り切れることはない。はで割り切れる。商はである。繰り上がりの回数を確認すると
の計算で繰り上がりが4ヶ所で生じている。
繰り上がりが生じてた場合、1つ上の位に1が足されることから、繰り上がりが生じたときの1つ上の位の計算は
、、、のいずれかになることがわかる。つまりそのような場所の数を数えれば良い。
よって、筆算で行なうには、、、の2進数表示を並べて、1の個数が奇数個になる桁が何箇所あるかを数えれば、それが求める答えとなる。
これを式で書こう。排他的論理和 XOR は交換律と結合律をみたす論理演算であり、1の数が奇数個であれば1、偶数であれば0を返す論理演算である。よって、 XOR XOR の2進数表示における1の個数が繰り上がりの回数となり、それが求める答えとなる。
2020.10.19追記
■を久しぶりに読み返すと、p.44 に、二項係数が素数 で割り切れる回数は, 進記法の加法での繰り上がり回数である(クンマー、1852)とある.
これまでの結果からクンマーの定理を導くという楽しい仕事は読者に残しておこう.
(演習問題2.5になっているが、解答はない).
2021.03.13追記
この Kummer の定理、
2021年(令和3年)東京大学-数学(理科)[4] - [別館]球面倶楽部零八式markIISR
で出題されたこともあって受験業界でも大分有名になりつつある.
受験数学界で確認した初出は,
2015年(平成27年)東京大学前期-数学(理科)[5] - [別館]球面倶楽部零八式markIISR
でも触れたが,
大学への数学2001年2月号に雲幸一郎さんの「素数で何回割り切れるか」という記事に
「p進展開で a+b を計算するときに"繰り上がり"が何回起こるかで決まります。」
と書いてある.
雲ですがなにか?
Kummer の定理の証明は
を参照しても良い。