如何检查数字是否是6的倍数?

时间:2012-03-16 04:26:30

标签: algorithm binary

我想要一个只使用移位,加法或减法运算的算法来查找数字是否是6的倍数。所以,基本上只是二进制运算。

到目前为止,我认为我应该合理地将数字移动两次除以4,然后从中减去6次。但我知道我的方法有问题,无法弄清楚是什么。

6 个答案:

答案 0 :(得分:7)

1)简单(N & 1) == 0检查数字是否可被2整除。

2)使用Bit hack答案(来自This主题。)来检查3的可分性。

如果两者都为真,则您的数字可以被6整除。

答案 1 :(得分:0)

Reference: http://wiki.answers.com/Q/How_can_you_tell_if_a_number_is_a_multiple_of_6

It is a multiple of six if BOTH of the following statements are true:
1) The last digit (ones place) is 0, 2, 4, 6, or 8.
2) When you add all the digits together, you get a multiple of 3.


Reference: http://wiki.answers.com/Q/How_can_you_tell_if_a_number_is_a_multiple_of_3

1) Start with a number N. 
2) Sum the digits of the number, and get M. 
3) If M is larger than 10, set N=M and return to stage 2.
4) Otherwise, M is now smaller than 10. If M is 0,3,6 or 9, then N is a multiple of 3

答案 2 :(得分:0)

您可以尝试使用可用的基本操作来实现除法算法。从4年级开始的基本长分算法可能就足够了(只需要用基数2而不是基数10来做事,用位移代替乘法)

答案 3 :(得分:0)

如何将数字减去6,直到它达到零。 如果你得到零,那么这个数字可以被6除尽。 要么 继续将数字除以2(二进制上的移位操作),直到数字小于12。 然后从中减去6。如果小于零(不可分) 如果零可分。 如果不减3  如果小于零(不可分) 如果零可分。

答案 4 :(得分:0)

行。这就是我要做的事情(只是第一个想法):

6的倍数是2和3的倍数,所以它应该同时满足2和3的可分性标准......所以......

  • 检查可分性2

    1. 右移数字
    2. 如果余数> 1,则重复1。
    3. 如果remaining = 1,则为FALSE,否则继续。

      如上所述,通过2检查可除性显然也可以通过(N& 1 == 0)实现。这只是检查N的二进制表示的最后一位:如果它是1,N是奇数(因此不能被2整除),如果它是0,则它是完全可分的......

  • 检查可分性3
    1. Substract 3。
    2. 如果余数> 3,则重复1。
    3. 如果余数> 0,则为FALSE,否则为TRUE。

答案 5 :(得分:0)

如果我们将操作范围扩展到“位掩码”和“位移”,那很简单。

正如相当多的人所说,两分之二的可分性相当于(n & 1) == 0。可分性为3(相对)容易二进制。将累加器a初始化为0,然后重复a += (n & 3); n = (n >> 2);,直到n为0.如果(且仅当)a为3,则n可被3整除。