Как узнать, делится ли двоичное число на 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.