バイナリシステムに3で割るための分割可能なルールがあるかどうかを知りたいです。
例:10進数では、数字の合計が3で除算されると、数値は3で除算されます。例:15 -> 1+5 = 6 -> 6
は3で除算されるため、15は3で除算されます。
理解すべき重要なことは、そうするコードを探していないということです。bool flag =(i%3 == 0);私が探している答えではありません。私は、10進法と同じように人間が簡単に実行できるものを探しています。
このWebサイトを参照してください。 2進数が3で割り切れるかどうかを確認する方法
基本的に、右からゼロ以外の奇数位置ビットとゼロ以外の偶数位置ビットの数をカウントします。それらの差が3で割り切れる場合、数は3で割り切れます。
例えば:
15 = 1111
は、2つの奇数ビットと2つの偶数非ゼロビットを持っています。差は0です。したがって、15
は3
で割り切れます。
185 = 10111001
には、2つの奇数の非ゼロビットと3つの偶数の非ゼロビットがあります。違いは1です。したがって、185
は3
で割り切れません。
説明
2^n
値を考慮してください。 2^0 = 1
が一致する1 mod 3
であることを知っています。したがって、2^1 = 2
は構成2*1 = 2
mod 3です。パターンを続けると、nが奇数の2^n
の場合、2^n
は合同1 mod 3
であり、偶数であることもわかります。一致する2 mod 3
は-1 mod 3
です。したがって、10111001
は合同1*1 + 0*-1 + 1*1 + 1*-1 + 1*1 + 0*-1 + 0*1 + 1*-1
mod 3であり、これは合同1 mod 3
です。したがって、185は3で割り切れません。