停机问题--The Halting Problem

http://www.juniata.edu/faculty/rhodes/intro/theory2.htm
halter3
看停机问题时,觉得它跟我国的“以子之矛攻子之盾”的想法很相似
也跟C语言的struct内不能包含自身很相似
停机问题描述:是否存在这样的一段代码H,这段代码H以任意的代码P作为输入,它判断代码P在执行的过程中是否会停止。如果代码P在执行的过程中会一直执行下去,不会停止,则程序H输出“loop”;反之,如果代码P在执行的过程中会停止,即代码P执行一段时间之后,代码P执行结束了,那么程序H输出“halt”
例如:
//不会停止,一直执行的程序
#include<stdio.h>
int main()
{
    int x0,x1,x2;
    x0=x1=1;
    do{
        x2=x0+x1;
        x0=x1;
        x1=x2;
        printf("x0=%d,x1=%d/n",x0,x1);
    }while(x0!=x1);
    return 0;
}
//执行一段时间之后会停止的程序
#include<stdio.h>
int main()
{
    int x0,x1,x2;
    x0=x1=1;
    do{
        x2=x0+x1;
        x0=x1;
        x1=x2;
        printf("x0=%d,x1=%d/n",x0,x1);
    }while(x0<x1);
    return 0;
}
停机问题说明不存在具有上述功能的代码H,证明如下:
假设存在具有这样功能的代码H,我构建一段如下所示的代码K,代码K也以任意代码作为输入
function K( code P)
   if ( H(P) == ‘loop’)
        return;
   else
        while(1);
代码K具有这样的功能,如果输入的代码P不会停止( if  (  H(P) == ‘loop’ )),那么代码K直接返回,反之代码K一直执行
那么我现在让代码K自己作为代码K的输入,即 K( K ),矛盾就出现了
为了方便叙述,将 K( K ) 写成 K1( K2 )
如果K1( K2 )一直在执行,那么说明K2会返回,而K2本身就是K1。K1一直执行,K2会返回,而K1就是K2,矛盾;反之亦然

停机问题的出发点是为了提出一种万能算法。
X+1 和 X-1 均为质数的称为孪生质数,例如 3 和 5
现在我写一个程序,它一直对外输出孪生质数。现在用H来判断这个程序是”loop” 还是”halt”,如果为”loop”,则说明不存在最大孪生质数,反之则说明存在最大孪生质数

上面的说法有个矛盾的地方,就是这个一直对外输出孪生质数的程序应该怎么写?
程序的大体结构似乎是这样的:
while(true){
    if ( 最大孪生质数) break
    else  继续找下一个孪生质数
}
关键是这个“最大孪生质数”如何判断?
不解?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值