如何知道二进制数是否除以3?

时间:2016-09-08 08:22:23

标签: algorithm math binary

我想知道二元系统中是否存在除以3的任何可分规则。

例如:在十进制中,如果数字总和除以3,则数字除以3.例如:15 -> 1+5 = 6 -> 6除以3,因此15除以3.

要理解的重要一点是,我不会寻找能够这样做的代码.bool flag =(i%3 == 0);是我正在寻找的答案。我寻找人类容易做的事情,就像十进制定律一样。

2 个答案:

答案 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 位