2014年c语言从入门到精通.pptVIP

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《ASP.NET 3.5网站开发从入门到精通》 第19章 哥德巴赫猜想 第19章 哥德巴赫猜想 第19章 哥德巴赫猜想 第19章 哥德巴赫猜想 哥德巴赫猜想 从哥德巴赫猜想(Gold Bach Conjecture)提出这个猜想至今,许多数学家都不断努力想攻克它,但都没有成功。本章将使用C语言从算法问题入手,并一步步实现一个验证“猜想”结论正确性的程序。 19.1 问题描述 哥德巴赫猜想大致可以分为以下两个猜想。 ⑴ 二重哥德巴赫猜想:每个不小于6的偶数都可以表示为两个奇素数之和,如下: 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的偶数都可以表示为两个奇素数之和”,可知,我们要实现的是判断任何一个大于6的偶数都可以有两个素数相加。以下将仔细地分析问题并实现算法。 19.2.1 问题分析 而我们的将要编写的程序,就是为了验证哥德巴赫猜想中提到的任何一个偶数,对大于6的偶数n可以分解成两个素数的和,这个结论是否正确。所以,程序应该可以输入一个数,判断是否为偶数,将这个偶数分解成一个小素数和大素数。再分别判断小素数与大素数之合是否就等于这个偶数。而且,需要将结果打印输出。 19.2.1 问题分析 我们在编程之前,需要明确两个数学概念:素数和偶数。 ⑴ 素数就是质数,指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和数自身)的自然数即为素数。 ⑵ 偶数就是能被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 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. 将数偶数分解成两个素数,并判断“猜想”结论是否成立。 取一个数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(i) IsPrimer(n-i)) 09 { 10 *t

您可能关注的文档

文档评论(0)

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档