我想知道在二进制系统中是否有可被3整除的规则。
例如:在十进制中,如果数字的各位数字之和可被3整除,则该数字也可被3整除。例如:15 -> 1+5 = 6 -> 6
可以被3整除,所以15也可以被3整除。
重要的是要理解的是,我不是在寻找能够实现此功能的代码.. 像 bool flag = (i%3==0); 这样的代码并不是我要找的答案。我寻找的是一些易于人类理解的东西,就像十进制法则一样。
我想知道在二进制系统中是否有可被3整除的规则。
例如:在十进制中,如果数字的各位数字之和可被3整除,则该数字也可被3整除。例如:15 -> 1+5 = 6 -> 6
可以被3整除,所以15也可以被3整除。
重要的是要理解的是,我不是在寻找能够实现此功能的代码.. 像 bool flag = (i%3==0); 这样的代码并不是我要找的答案。我寻找的是一些易于人类理解的东西,就像十进制法则一样。
请参考这个网站:如何判断二进制数是否可被三整除
基本上,从右边开始计算非零奇数位和非零偶数位的比例。如果它们的差是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同余。继续这个规律,我们注意到对于n为奇数的2^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整除。
有一种方法与十进制数字的校验和非常相似:但是您需要提前划掉重复的数字(在连续两个0或两个1之后),直到您得到类似于<1|0>0101010...的形式。然后计算1的数量:如果它们的总和(=校验和)可以被3整除,则原始数字也可以被3整除。
例子:
10111001 -> 101001 ->1011 -> 10 : yields checksum 1 -> not divisible
10111010 -> 101010 : yields checksum 3 -> is divisible
10111011 -> 101011 -> 1010 : yields checksum 2 -> not divisible