验证哥德巴赫猜想
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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) ⏹面向对象程序设计方法认为,客观世界是由各种各样的实体组成的,这些实体 就是面向对象方法中的对象。 ⏹消息是向某对象请求服务的一种表达方式 ⏹对象之间的交互通过发送消息来实现。 ⏹消息包括:目标对象 ,请求的方法 ,参数 什么是面向对象方法