patternModerate
DFA that accepts decimal representations of a natural number divisible by 43
Viewed 0 times
dfaacceptsnumberdecimaldivisiblethatrepresentationsnatural
Problem
First, I have tried to build a DFA over the alphabet $\sum = \{0,\dots, 9\}$ that accepts all decimal representations of natural numbers divisible by 3, which is quite easy because of the digit sum. For this I choose the states $Q = \mathbb{Z}/3\mathbb{Z}\cup\{q_0\}$ ($q_0$ to avoid the empty word), start state $q_0$, accept states $\{[0]_3\}$ and $\delta(q, w) =\begin{cases} [w]_3 &\mbox{if } q = q_0 \\
[q + w]_3 & \mbox{else } \end{cases}$
Of course, it doesn't work that way for natural numbers divisible by 43. For 43 itself, I would end in $[7]_{43}$, which wouldn't be an accepting state. Is there any way I can add something there or do you have other suggestions on how to do this? Thanks.
[q + w]_3 & \mbox{else } \end{cases}$
Of course, it doesn't work that way for natural numbers divisible by 43. For 43 itself, I would end in $[7]_{43}$, which wouldn't be an accepting state. Is there any way I can add something there or do you have other suggestions on how to do this? Thanks.
Solution
If the string read has a certain decimal value, then reading the next digit changes that value: multiply by $10$ and add that digit. The DFA keeps track of that value modulo $43$. Thus, for $q\in \{0,1,\dots,42\}$ and $a\in \{0,1,\dots,9\}$ you do
$\qquad \delta(q,a) = (10\cdot q + a) \bmod 43$.
Note that the DFA does not actually perform the computation; the transition is hard-coded.
$\qquad \delta(q,a) = (10\cdot q + a) \bmod 43$.
Note that the DFA does not actually perform the computation; the transition is hard-coded.
Context
StackExchange Computer Science Q#9049, answer score: 10
Revisions (0)
No revisions yet.