【问题标题】:How to know if a binary number divides by 3?如何知道一个二进制数是否除以 3?
【发布时间】:2017-01-16 02:14:20
【问题描述】:

我想知道二进制系统中有没有除以3的除法规则。

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

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

【问题讨论】:

标签: algorithm math binary


【解决方案1】:

参考本网站: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 一致。继续该模式,我们注意到对于其中n 为奇数的2^n2^n1 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 整除。

【讨论】:

  • 非常感谢,你知道这个技巧的数学解释是什么吗?
  • @ItayBraha:不完整的解释:这与测试十进制数是否可被 11 整除的技巧相同。这里的关键字是交替数字总和。当且仅当十进制基数的交替数字和可被 11 整除时,原始数字也是如此。当您要测试可除性的数字比数字系统的基数多一个时,可以使用它。要测试基数以下 1 的数字的可分性(例如十进制系统中的 9),请使用普通数字和。因此,我们也可以轻松地测试十六进制表示中的 17 整除性。
  • 十进制11的整除性测试与二进制3的整除性测试相同。另外,二进制中的 3 是 11。我错过了什么吗?
  • 如果你真的想深究,那就意味着你可以将一个二进制数的所有数字相加,以确定它已经能被1整除(n-1整除规则)
【解决方案2】:

我想将这些位从右到左分成许多小块,每个小块有 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

【讨论】:

    猜你喜欢
    • 2011-12-09
    • 2015-01-28
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多