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