我想知道二元系统中是否存在除以3的任何可分规则。
例如:在十进制中,如果数字总和除以3,则数字除以3.例如:15 -> 1+5 = 6 -> 6
除以3,因此15除以3.
要理解的重要一点是,我不会寻找能够这样做的代码.bool flag =(i%3 == 0);是我正在寻找的答案。我寻找人类容易做的事情,就像十进制定律一样。
答案 0 :(得分:28)
请参阅此网站:How to Tell if a Binary Number is Divisible by Three
基本上计算非零奇数位位数和非零位偶数位来自右侧。如果它们的差异可以被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整除。
答案 1 :(得分:1)
我想把这些位从右到左分成许多小块,每块有 2 位,如果它们的和能被 3 整除,那么这个数能被 3 整除。 例如,我们有 100111(39),我们把这个数从右到左分成 3 份,然后我们有 11,01 和 10。它们的总和是 110,可以被 3 整除,然后数字 100111 可以被 3 整除。 示例 2:1011010 将它们分成几部分,所以现在我们有 10,10,01,01。它们的总和是 110,可以被 3 整除,然后 1011010 可以被 3 整除。 另请注意,此技巧仍然适用于 7,但每个部分必须有 3 位而不是 2 位