Как узнать, делится ли двоичное число на 3?

Я хочу знать, есть ли в двоичной системе делимое правило для деления на 3.

например: в десятичной форме, если сумма цифр делится на 3, то число делится на 3. Например: 15 -> 1+5 = 6 -> 6 делится на 3, поэтому 15 делится на 3.

важно понять, что я не ищу код, который будет это делать.. bool flag = (i%3==0); это не тот ответ, который я ищу. Я ищу что-то, что легко для человека сделать так же, как десятичный закон.

1 ответов


см. Этот веб-сайт:Как определить, делится ли двоичное число на три

в основном подсчитайте количество ненулевых нечетных разрядов позиций и ненулевых четных разрядовсправа. Если их разность делится на 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 это congurent 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.