验证哥德巴赫猜想

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

例7-3 验证“哥德巴赫猜想”

⏹“哥德巴赫猜想”是数论中的一个著名难题,200多年来无数数学家为其呕心沥血,却始终无人能够证明或伪证这个猜想。

⏹“哥德巴赫猜想”表述为:任何一个大于等于4的偶数均可以表示为两个素数之和。

⏹1742年法国数学爱好者哥德巴赫在给著名数学家欧拉的信中提出“哥德巴赫猜想”问题。

问题的分解

求解第一步提出问题:

验证哥德巴赫猜想

⏹第二步设一上限数M,验证从4到M的所有偶数是否能被分解为两个素数之和。 1. 定义一个变量X,初值为4。 2. 每次令其加2,并验证X能否被分解为两个素数之和,直到 X不小于M为止。

验证哥德巴赫猜想(续一)

第三步如何验证X是否能被分解为两个素数之和。

1.从P=2开始;

2.判别X—P是否仍为素数:

3.若是,打印该偶数的分解式。

4.否则,换更大的素数,再继续执行2.。

如此循环,直到用于检测的素数大X/2且X 与其之差仍不是素数,则打印“哥德巴赫猜想”不成立。

验证哥德巴赫猜想(续二)

第四步生成下一个素数。

(1)当前素数P加1

(2)判别P是否是素数;

(3)若是素数,返回P;

(4)否则,P加1,继续执行( 2)。

验证哥德巴赫猜想(续三)

⏹经过四步分解精化,将“验证哥德巴赫猜想”这个命题已经分解为计算机可以求解的数学模型了。

⏹剩下的问题就是编程求解了。如何编程是程序设计课程要解决的问题。

哥德巴赫猜想算法分析

1) 用“筛选”法生成素数表PrimeList[M]。先在素数表中产生0到M-1的所有自然数,然后将已确定的所有素数的倍数置0(求模取余为0)。

2,3,5,7,11,13,17,19,21,23,29,31...

2) 这样一来,素数表中有许多0,为找下一个素数,要跳过这些0。

3) 分解0到M-1之间的所有偶数;

①循环(x

②先取素数P=2,判别若PrimeList[x-p]等于0,说明分解不成功,p取素数表中下一个素数;再执行②

③若PrimeList[x-p]不等于0,分解成功,打印分解式

④x = x + 2,继续执行①,检查下一个偶数。程序逻辑功能框图

程序模块结构

程序(生成素数表子函数)

#include

#define M 31 /* 定义验证范围*/

void CreatPrimeList(int PrimeList[])

{ int i, j;

for(i=0; i

i = 2; /* i 取初值2 */

while( i < M / 2 )/*A能分解为两个因子相乘的话,其中一个因子必小于或等于INT(sqrt(A))。*/ {

for(j=i+1; j

PrimeList[j] = 0;

i = NextPrimeNumber(i,PrimeList);/*取下一个素数*/

}

}

求下一个素数子函数

/*---- 函数NextPrimeNumber: 求下一个素数-----*/

int NextPrimeNumber(int p, int PrimeList[ ])

{

p = p+1;

while(PrimeList[p]==0)

p = p+1;

return PrimeList[p];

}

主函数

main()

{ int PrimeList[M]; int x, p;

CreatPrimeList(PrimeList); /*生成素数表*/

x = 4; /* 从4到M 开始验证*/

while(x<=M)

{ p = PrimeList[2]; /* 第1个素数是2 */

/* 验证偶数减去一个素数后的余数是否仍为素数*/ while(p

p = NextPrimeNumber(p, PrimeList);

if(p>=M/2) /* 找到一个不能分解为两个素数和的偶数*/

printf("Great discovery: Goldbahe is wrong!\n");

else /* PrimeList[x-p]≠0 分解成功*/

printf("The even number %d = %d + %d\n",x,p,x-p);

/* 验证下一个偶数*/

x = x+2;

}

}

面向对象程序设计

⏹基本思想

⏹基本过程

⏹主要特点

面向对象的基本概念

⏹“面向对象“简称为“OO”。这是目前计算机业界使用的高频词。“OO”代表着一种新的思维方式,代表着一种新的程序设计方法的潮流。⏹

⏹什么是OO方法?什么是OOP?

⏹为什么要选择OO方法?

面向对象程序设计基本思想

⏹面向过程的程序设计(Structure Programming) ⏹以功能为中心,采用函数来描述(动词) ⏹传统的程序设计方法,出发点是“怎样做(How)?”。

⏹面向对象程序设计(OOP)

⏹面向对象程序设计方法认为,客观世界是由各种各样的实体组成的,这些实体

就是面向对象方法中的对象。

⏹消息是向某对象请求服务的一种表达方式

⏹对象之间的交互通过发送消息来实现。

⏹消息包括:目标对象 ,请求的方法 ,参数

什么是面向对象方法

相关文档
最新文档