- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
挑战程序设计竞赛-求素数算法 素数(prime number) ,又称质数,指在大于1的自然数中,除了1和此整数自身外,无法被其他自然数整除的数(也可定义为只有1和本身两个因数的数)。 比1大但不是素数的数称为合数。1和0既非素数也非合数。素数在数论中有着非常重要的地位。 最小的素数是2,也是素数中唯一的偶数;其他素数都是奇数。素数有无限多个,所以不存在最大的素数。 围绕著素数存在很多问题、猜想和定理。著名的有“孪生素数猜想”和“哥德巴赫猜想”。 关于素数的算法是信息学竞赛和程序设计竞赛中经常出现的基础算法,虽然题目各不相同,但都要涉及验证一个自然数是否为素数的问题。下面探讨寻找一定范围内素数的几个算法。 根据以上思路,可编写以下的试除法函豹: 其实,可以对素数的定义进行进一步的分析。要判断数n是否为素数,不需要用n一直除到n-1才能确认,而只需要除到√n 而就可以了。例如,n=15,则能被15整除的除数有1、3、5,对于除数5就不用判断,因为n被3整除时其商就是5,也就表示n能被5整除了。 验证一个自然数是否为素数,这个问题早在中世纪就引起人们的注意,当时人们还在寻找一个公式可以一劳永逸地解决求素数的问题,直到高斯提出了素数产生的不确定性后,人们才认识到没有一个公式可以简单确认素数,从而人们才转去寻找各种验证素数的方法。 一、试除法 试除法是根据素数的定义得出的一种方法,用需要验证的数n逐个除以从2开始至n-1中的所有数,若能被某一个数整除,表示有一个因数,说明数n不是素数:若直到n-1都不能被整除,则说明该数是素数。 根据以上思路,可编写以下的试除法函数: 试除法判断是否为素数的函数: int is_prime(int n) { int i; if (n=1) return 0; //n不是素数,返回零 for(i=2; i=n; i++) { if( n%i==0 ) return 0; //判断n能否被i整除 } return 1; } 其实,可以对素数的定义进行进一步的分析。要判断数n是否为素数,不需要用n一直除到n-1才能确认,而只需要除到√n 而就可以了。例如,n=15,则能被15整除的除数有1、3、5,对于除数5就不用判断,因为n被3整除时其商就是5,也就表示n能被5整除了。 改进后的是否为素数的函数: int is_prime(int n) { int i; if (n=1) return 0; //n不是素数,返回零 for(i=2; i*i=n; i++) //for(int i = 2; i = sqrt(n); ++i) { if( n%i==0 ) return 0; //判断n能否被i整除 } return 1; } 改进后的程序中,在for循环中以i*i既i的平方与n值进行比较,就可以显著地减少循环的次数,提高验证的效率。 这里用了 i*i = n 来代替 sqrt(n),可以避免调用函数sqrt(),其消耗时间较多,特别是在大量数据测试的时候消耗很明显。 求出1000以内的所有素数: #include cstdio int is_prime(int n) { for(int i=2;i*i=n;i++) if(n%i==0) return 0; return 1; } int main() { int i, n=1000, num = 0; for(i=2; i=n; i++) { if(is_prime(i)) printf(%3d ,i); } return 0; } 在上面的代码中,通过is_prime()函数来验证指定区间(2~1000)中的每一个数是否为素数,而is_prime()函数中又通过循环进行验证。这种双循环会导致程序执行效率不高。 试除法求解n以内素数的算法。
您可能关注的文档
- 拜耳杀菌剂定位图.ppt
- 拜年有礼II活动方案.pptx
- 拜耳法生产氧化铝分解车间.ppt
- 拜访前的准备工作.ppt
- 拜访客户的8个步骤以及客户案例分析.ppt
- 拜访客户的七大黄金定律.ppt
- 拟上市公司重点财务会计问题.ppt
- 拟人personification.ppt
- 拟写广告语和宣传语.ppt
- 拜访客户前的工作内容.ppt
- 2025年甘肃庆阳市教育局“特岗计划”招聘空岗调剂笔试备考题库及答案解析.docx
- 2025西咸新区沣东第十一小学补充招聘(3人)笔试备考题库及答案解析.docx
- 2025湖北孝感市大悟县城市社区专职工作人员招聘25人笔试备考题库及答案解析.docx
- 电阻器专用合金粉制造工岗位责任制.doc
- 2025贵州盘州市淤泥乡卫生院自主招聘见习人员笔试备考题库及答案解析.docx
- 2025四川绵阳市梓潼县文昌中学、文昌三小面向县内学校考调教师48人笔试备考题库及答案解析.docx
- 2025山东潍坊坊华科技中等职业学校产教融合学院招聘笔试备考题库及答案解析.docx
- 2025南平光泽县鸾凤镇卫生院面向社会公开招聘乡村医生笔试备考题库及答案解析.docx
- 2025年甘肃省白银市景泰县招聘草窝滩镇八道泉村文书笔试备考题库及答案解析.docx
- 2025四川成都大学考核招聘博士辅导员20人笔试备考题库及答案解析.docx
最近下载
- 腹腔引流管脱管应急预案.pptx VIP
- 呼吸衰竭最新治疗指南解读PPT课件.pptx VIP
- 呼吸衰竭最新治疗指南解读PPT课件.pptx VIP
- 辟谷养身:12.空腹力革命.pdf VIP
- 施工组织设计主要经济指标.pptx VIP
- 2023年ISO15189 医学实验室管理体系全套表格.docx VIP
- DLT5210-2021版第一部分土建工程(热力系统土建工程质量验收)可编辑表格.docx VIP
- 10000字在学校挨机器人板子的作文.docx VIP
- 《A水利枢纽的拱坝设计中拱坝应力分析计算案例》3000字.docx VIP
- 2025年河北承德市中小学教师招聘考试试卷带答案.docx VIP
文档评论(0)