algorithm - 如何知道一个二进制数是否被 3 整除?

标签 algorithm math binary

我想知道二进制有没有除以3的整除法则

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

要了解的重要一点是,我不是在寻找可以这样做的代码.. bool flag = (i%3==0);不是我要找的答案。我在寻找人类容易做到的事情,就像十进制法则一样。

最佳答案

引用这个网站: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 = 22*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 整除。

关于algorithm - 如何知道一个二进制数是否被 3 整除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39385971/

相关文章:

c++ - 求所有可能的点对之间力的总和?

c - 奇怪的 C 程序行为

javascript - ThreeJS 相机朝向点

bash - for 循环中 bash 中的简单数学语句

python - 有人可以解释 Python 结构解包吗?

algorithm - 3D 三棱柱最近点

javascript - 我怎样才能更多地组织我的代码以防止不良行为?

algorithm - 再现具有原始形状的图像。 (图形优化问题)

encoding - 对随机可变长度二进制代码序列进行编码的最紧凑方法?

c - 如何在二进制文件上写入 CSV 字段?