硬件中的算法,以确定数字是否可被5整除

时间:2013-08-27 19:18:31

标签: algorithm binary hardware division

我试图想出一个算法来实现给定的n位二进制数。我尝试了很多例子,但我找不到任何模式。那我该怎么办呢?

5 个答案:

答案 0 :(得分:2)

这个怎么样:

将数字转换为基数4(通过简单地组合位对,这是微不足道的)。基数4中的5是11.可被11整除的基数4有点熟悉:11,22,33,110,121,132,203,......

11的可除性规则是你添加所有奇数和所有偶数并从另一个中减去一个。如果结果可以被11整除(记住是5),那么它可以被11整除(记住是5)。

例如:

123456d = 1 1110 0010 0100 0000b = 132021000_4

The even digits are 1 2 2 0 0 : sum = 5d
The odd digits are   3 0 1 0  : sum = 4d

Difference is 1, which is not divisble by 5

或另一个:

123455d = 1 1110 0010 0011 1111b = 132020333_4

The even digits are 1 2 2 3 3 : sum = 11d
The odd digits are   3 0 0 3  : sum = 6d

Difference is 5, which is a 5 or a 0

这应该有一个相当有效的硬件实现,因为它主要是位切片,接着是N / 2个加法器,其中N是你感兴趣的数字中的位数。

请注意,在添加数字和减去后,最大值为3/4 * N,因此如果您最多有16位数字,则最多可以获得12个,因此您只需要检查0 ,±5和±10明确。如果您使用32位数字,那么结果最多可以得到24,因此您还需要检查结果是否为±15或±20。

答案 1 :(得分:2)

制作确定性有限自动机(DFA)以实现可分性检查并在硬件中实现DFA。

创建DFA以便将其除以5是很容易的。你只需要注意余数并检查2r(mod 5)和2r + 1(mod 5)映射到的是什么。有很多网站都在讨论这个问题。例如this one

有一些众所周知的例子可以将DFA转换为硬件表示。

答案 2 :(得分:1)

好吧,我刚想通了...... 数字mod 5 = a0 * 2 ^ 0 mod 5 + a1 * 2 ^ 1 mod 5 + a2 * 2 ^ 2 mod 5 + a3 * 2 ^ 3 mod 5 + a4 * 2 ^ 4 mod 5 + ....  = a0(1)+ a1(2)+ a2(-1)+ a3(-2)+ a4(1)重复......

因此奇数位的差异+偶数位差的2倍=可被5整除

例如......考虑110010
奇数位数= 0-0 + 1 = 1或01 偶数差= 1-0 + 1 = 2或10

奇数位的差异+偶数位差的2倍= 01 + 2 *(10)= 01 + 100 = 101可被5整除。

答案 3 :(得分:1)

每个位对可被5整除的贡献是四位模式3421。 您可以一次移动任意二进制数4位,为正位添加相应的值。

示例:

100011

拿p1 应用模式0021 总和3

接下来的四位0010 应用模式0020 sum = 5

答案 4 :(得分:0)

任何作为答案的任务一定会在一年之后过期:
(这完全等同于JoshG79,notsogeek或james:4≡-1(mod 5),3≡-2(mod 5)的答案(在论证中减少了关于递归的挥手,并且没有可靠的处理载体在电路中))