1. ホーム
  2. algorithm

[解決済み] 2進数が3で割れているかどうかを知るには?

2022-02-10 18:19:07

質問

2進法において、3で割るときの割り算のルールはあるのでしょうか?

例:10進数の場合、桁の和を3で割ると、その数は3で割られます。 15 -> 1+5 = 6 -> 6 が3で割れるので、15が3で割れる。

bool flag = (i%3==0); は、私が求めている答えではありません。私は、10進法のように人間にとって簡単にできるものを探しています。

どのように解決するのですか?

こちらのサイトをご参照ください。 2進数が3で割り切れるかどうかの見分け方

基本的には、0でない奇数位置のビットと0でない偶数位置のビットの数を数えます。 右から . その差が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です。このパターンを続けると 2^n ここで、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で割り切れるものではありません。