Я хотел бы знать, как я могу построить регулярное выражение, чтобы узнать, кратно ли число в базе 2 (двоичное) 3. Я читал в этой теме Проверьте, делится ли число на 3 но они не делают это с регулярным выражением, и график, который кто-то нарисовал, неверен (потому что он не принимает четные числа).Я пытался с: ((1 +) (0 *) (1 +)) (0 ), но это не работает для некоторых значений.Надеюсь, вы можете помочь мне.
ОБНОВЛЕНИЕ: Хорошо, спасибо всем за вашу помощь, теперь я знаю, как нарисовать NFA, здесь я оставил график и регулярное выражение:
На графике, состояния - это число в базе 10 мод 3.
Например: чтобы перейти в состояние 1, нужно иметь 1, затем вы можете добавить 1 или 0, если вы добавите 1, у вас будет 11 (3 в базе 10), и это число mod 3 равно 0, тогда вы рисуете дугу в состояние 0.
![Whiteboard version](https://i.stack.imgur.com/5wqTS.png)
((0*)((11)*)((1((00) *)1) *)(101 *(0|((00) *1 *) *0)1) *(1(000)+1*01)*) *
И другиерегулярное выражение работает, но это короче.
Большое спасибо:)