pascal编程:哥德巴赫猜想(升级版)1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和.质数是指除了1和本身之外没有

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/28 13:12:51

pascal编程:哥德巴赫猜想(升级版)1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和.质数是指除了1和本身之外没有
pascal编程:哥德巴赫猜想(升级版)
1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和.质数是指除了1和本身之外没有其他约数的数,如2和11都是质数,而6不是质数,因为6除了约数1和6之外还有约数2和3.需要特别说明的是1不是质数.
这就是哥德巴赫猜想.欧拉在回信中说,他相信这个猜想是正确的,但他不能证明.
从此,这道数学难题引起了几乎所有数学家的注意.哥德巴赫猜想由此成为数学皇冠上一颗可望不可及的“明珠”.
现在请你编一个程序验证哥德巴赫猜想.
先给出一个奇数n,要求输出3个质数,这3个质数之和等于输入的奇数.
输入格式
仅有一行,包含一个正奇数n,其中9

pascal编程:哥德巴赫猜想(升级版)1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和.质数是指除了1和本身之外没有

由于“n大于9并且小于10000”,用朴素算法应该也不会超时.

      

       这里提供一种优化的算法:

先构造2~10000以内的质数表,并除去其中的2,就能得到3~10000以内的奇质数表;

令 i 从 3开始循环(这是外循环),j 从3开始循环(这是内循环),然后判断(n-i-j)是不是质数,如果是,就 writeln(i,' ',j,' 'n-i-j).



完整代码如下:
program Goldbach;
var prime:array[2..10000]of boolean;
      i,j,n:longint;
begin
  readln(n);
  for i:=2 to trunc(sqrt(n)) do
   if not prime[i] then
   begin
    for j:=2 to n div i do
     prime[i*j]:=true;
  end;
  
  for i:=3 to n do
   if not prime[i] then
    for j:=3 to n do
     if not prime[j] then
      if not prime[n-i-j] then 
      begin
        writeln(i,' ',j,' ',n-i-j);
        exit;
      end;
end.

真的不长吧?最大的数9999也不用1秒.
筛法求素数是一个很常用的算法,请LZ一定要掌握.
祝学习进步.

我不会 这个语言,所以帮你百度上找到的,如果c语言,还行


http://zhidao.baidu.com/question/553416068.html  来源