2進数が3で割れるかどうかを知るにはどうすればいいですか? 質問する

2進数が3で割れるかどうかを知るにはどうすればいいですか? 質問する

2進法で3で割る割り切れる規則があるかどうかを知りたいです。

たとえば、10 進数では、数字の合計が 3 で割られる場合、その数は 3 で割られます。たとえば、15 -> 1+5 = 6 -> 6は 3 で割られるので、15 は 3 で割られます。

理解しておくべき重要なことは、私がそうするコードを探しているのではないということです。bool flag = (i%3==0); は私が探している答えではありません。私は、10 進法則のように人間が簡単に実行できるものを探しています。

ベストアンサー1

このウェブサイトを参照してください:2進数が3で割り切れるかどうかを知る方法

基本的に、ゼロでない奇数ビットとゼロでない偶数ビットの数を数えます。右からそれらの差が 3 で割り切れる場合、その数は 3 で割り切れます。

例えば:

15 = 11112 つの奇数ビットと 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このパターンを続けると、2^nn が奇数の場合は と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、これは と合同です1 mod 3。したがって 185 は 3 で割り切れません。

おすすめ記事