设计 DFA 接受可被 7 整除的十进制字符串

Design DFA accepting decimal strings divisible by 7

我是一名学习 DFA 的学生,正在寻找可以确定十进制数是否可以被 7 整除的 DFA。

今天我解决了数字 2,3,4,5,6,8,9 的整除问题,但我无法解决数字 7 的整除问题。我在网上搜索过,但我找不到找到任何对我有帮助或对我来说可以理解的答案。

所以现在我在这里寻求帮助。提前致谢。

基本思路是,我们将跟踪我们目前看到的数字的当前值,modulo 7。每个新数字都取旧数字乘以 10,然后加上新数字。因此,从x(mod7)对应的状态,向右加上d位,就是10x+d(mod7)对应的状态。这个DFA有70个状态(位数0-9乘以七除后的余数0-6)。

q    s    q'
------------
q0   0    q0
q0   1    q1
q0   …    …
q0   6    q6

q1   0    q3
q1   1    q4
q1   …    …
q1   6    q2

…

q6   0    q4
q6   1    q5
q6   …    …
q6   6    q3

考虑号码36736的处理:

(q0) --3--> (q3) --6--> (q1) --7--> (q3) --3--> (q5) --6--> (q0)
0           0*10+3      3*10+6      1*10+7      3*10+3      5*10+6
            0+3         30+6        10+7        30+3        50+6
            3           36          17          33          56
            3           1           3           5           0

这个数字可以被七整除,因为我们最终进入状态 q0,该状态对应于零 modulo 七 - 意思是七的偶数倍。