哥德巴赫猜想C语言ppt课件_第1页
哥德巴赫猜想C语言ppt课件_第2页
哥德巴赫猜想C语言ppt课件_第3页
哥德巴赫猜想C语言ppt课件_第4页
哥德巴赫猜想C语言ppt课件_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第19章哥德巴赫猜想,问题描述 问题分析及实现 开发过程常见问题及解决,第19章哥德巴赫猜想,问题描述 问题分析及实现 开发过程常见问题及解决,第19章哥德巴赫猜想,问题描述 问题分析及实现 开发过程常见问题及解决,第19章哥德巴赫猜想,问题描述 问题分析及实现 开发过程常见问题及解决,哥德巴赫猜想,从哥德巴赫猜想(Gold Bach Conjecture)提出这个猜想至今,许多数学家都不断努力想攻克它,但都没有成功。本章将使用C语言从算法问题入手,并一步步实现一个验证“猜想”结论正确性的程序,19.1 问题描述,哥德巴赫猜想大致可以分为以下两个猜想。 二重哥德巴赫猜想:每个不小于6的偶数都可

2、以表示为两个奇素数之和,如下: 6=3+3;8=3+5;10=5+5 三重哥德巴赫猜想:每个不小于9的奇数都可以表示为三个奇素数的和,如下: 9=3+3+3;11=3+3+5;13=3+5+5 在这里,我们以二重哥德巴赫猜想作为研究对象,通过编写C语言程序,来验证“猜想”的正确性,19.2 问题分析及实现,19.2.1 问题分析 19.2.2 问题实现 19.2.3 程序运行,19.2 问题分析及实现,拿到一个要求实现的算法问题,首先要看清、想明、把握每一个细节。只有这样,才可以顺利地将算法实现。由问题描述:“每个不小于6的偶数都可以表示为两个奇素数之和”,可知,我们要实现的是判断任何一个大于

3、6的偶数都可以有两个素数相加。以下将仔细地分析问题并实现算法,19.2.1 问题分析,而我们的将要编写的程序,就是为了验证哥德巴赫猜想中提到的任何一个偶数,对大于6的偶数n可以分解成两个素数的和,这个结论是否正确。所以,程序应该可以输入一个数,判断是否为偶数,将这个偶数分解成一个小素数和大素数。再分别判断小素数与大素数之合是否就等于这个偶数。而且,需要将结果打印输出,19.2.1 问题分析,我们在编程之前,需要明确两个数学概念:素数和偶数。 素数就是质数,指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和数自身)的自然数即为素数。 偶数就是

4、能被2整除的自然数,如2、4、6、8。 根据题目,要求是奇素数,即这个素数不可以是2,一定要大于2。我们需要划分以下两个子模块。 判断一个数是否为素数。 判断并分解大小素数的和是否等于需判断的偶数,19.2.2 问题实现,1. 判断输入的数字是否是素数 对于一个任何自然数,如何判断他是素数呢?如果这个自然数n,它存在两个因数,乘积等于n,要么两个因数一个是小于 、 一个大于 ,要么两个因数都等于 。那么,根据这个思路,代码如下(代码19-1.txt,19.2.2 问题实现,01 /*测试n是否是素数。如果是,返回1,否则返回0 */ 02 int IsPrimer(unsigned long

5、n) 03 04 unsigned long i; 05 unsigned long nqrt; 06 if (n = 2) 07 return 1; 08 if (n = 1 | n%2 = 0) 09 return 0; 10 /*如果它存在两个因数,乘积等于n,要么两个因数一定一个小于根号n,一个大于根号n要么两个因数都等于根号n*/ 11 nqrt = (unsigned long)sqrt(n); 12 for(i=2; i=nqrt; i+=1) 13 14 if (n%i = 0) 15 return 0; 16 17 return 1; 18,19.2.2 问题实现,2. 将数

6、偶数分解成两个素数,并判断“猜想”结论是否成立。 取一个数i,从最小素数开始到这个偶数的一半大小进行判断,当i为素数同时n-i也是素数时,这时猜想结论成立,否则结论不成立。代码如下(代码19-2.txt,19.2.2 问题实现,01 int IsRight(unsigned long n, unsigned long *tmpNumA, unsigned long *tmpNumB) 02 03 unsigned long i; 04 unsigned long half; 05 half = n/2; 06 for (i=3; i=half; i+=2) 07 08 if (IsPrimer

7、(i) 16,19.2.2 问题实现,3. 要求用户输入,判断,并输出结果。 在主程序中,要求用户输入一个大于6的偶数,调用判断函数,判断“猜想”是否成立,成立则输出等式,不成立则输出“猜想”错误。代码如下(代码19-3.txt,19.2.2 问题实现,01 int main(void) 02 03 unsigned long number; /*被验证的数*/ 04 unsigned long a, b; /*和为number的两个素数*/ 05 do 06 07 printf(请输入要验证的大于等于6的偶数(输入0则退出):); 08 scanf(%lu, 24,19.2.3 程序运行,19.3 开发过程常见问题及解决,开发过程常见问题及解决办法如下,仅供参考。 如果出现“warning C4013: sqrt undefined; assuming extern returning int”的编译警告,通常需要在程序开头添加数学函数头文件“#incl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论