如何设计图灵机来检查数字是否为质数?

时间:2018-12-03 15:17:59

标签: turing-machines automaton primality-test

我只能断定该逻辑必须包含图灵机中的乘法和除法逻辑。但是实际上我无法找出确切的解决方案。

1 个答案:

答案 0 :(得分:1)

好吧,只要有一个旧的TM可以做到,那么这个简单易懂。

  1. 输入磁带是#(n)#
  2. 使用TM将其写入磁带:#(n):( 2):( n)#
  3. 使用TM从两次之后的事物中减去:之间的所有内容,直到(1)您要删除的符号太少(不可除)或(2)剩下的符号正好为零(均分)。对于(1),请继续,否则-在(2)的情况下-停止不作为素数。
  4. 使用TM将其写入磁带:#(n):( m + 1):( n)#
  5. 使用TM来检查第一个:之前的东西是否大于两个:之间的东西。如果是这样,请继续执行步骤3。否则,请暂停接受(因为原始输入不能被大于其自身的数字整除)

采用所有描述的TM,并构建一个包含所有处于各种状态的行为的TM。这是素数语言的TM。

假设采用一元编码(即自然数 n 由字符串11 ... 1表示,其中1被重复 n 次),这里还有更多制作单个TM的提示:

  1. 原始输入
  2. 转到输入后的第一个空格,并写一个:。然后,向右写1。然后,向右写另一个1。然后向右写另一个:。然后,从开头到结尾的第一个空格来回跳动,复制输入的自然数的一进制数字。为此,将输入数字更新为其他符号,例如A,以便记住已复制的数字。当第一个:的左侧紧接着有一个A时,停止此过程。然后,将所有A都设置回1。
  3. 来回弹跳,从最里面的部分的最右边的部分中删除一个1,更新最里面的部分以使用A标记它们。标记了最里面部分的所有内容后,将它们设置回1,然后重复该过程,直到最右边部分的1s用完为止。
  4. 擦除第二个:及其后的所有内容;然后在末尾写一个1,然后写一个:,然后执行2中描述的TM。
  5. 在最左边和最里面的部分之间来回弹跳,并在移动时在每个部分中进行标记。如果首先在最里面的部分用完符号,则该数字小于输入的数字;如果您同时用完,则数字是相同的,这意味着输入数字首先会被自身整除,所以它是质数。