网站大量收购闲置独家精品文档,联系QQ:2885784924

判断质数--单重循环.pptVIP

  1. 1、本文档共13页,可阅读全部内容。
  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文档。上传文档
查看更多
判断质数--单重循环.ppt

判 断 质 数 练 习 题 * *  输入正整数N,判断其是否为质数。  是则输出“Yes”,否则输出“No”。 问 题 初步想法 根据质数的定义,质数N只有1和N两个因子。 因此,可以从2开始循环到N-1,用N逐个去除这些数,如果在[2, N-1]的范围内找不到第3个因子,则N就是质数。 (以下程序请在VB中运行) (val函数的作用是将字符转化为数字) Input N For i = 2 To N - 1 if N Mod i 0 Then Print Yes else Print No end if Next i 初步想法 上机验证 程序会有多个输出,不符合题目的意思。 原因在于,把输出语句写在了循环内部,造成多个输出。因此,我们需要把输出语句移到循环结束后。 但是,如何才能把循环里面判断的结果带出循环? 方法一:设一个变量,通常是布尔型,作为标记,循环结束后,根据这个标记输出结果。 (本课堂重点讲述) 方法二:设一个整数变量,在[2, N-1]内每找到一个因子就     加1,循环结束后,如果这个变量大于0,显然就     不是质数。(自己实现) 完整的正确程序 (VB版) N = Val(InputBox(请输入一个整数(其实是字符))) Prim = True For i = 2 To N - 1 if N Mod i = 0 Then Prim = False end if Next i if Prim = True Then Print Yes else Print No end if 程序意思:先假设N是质数,标记为True,然后寻找第3个因子,      如果找到就改变假设为False,如果找不到则假设不变。      循环结束后,根据这个标记输出相应结果。 易错点 if … then 后面加else N = Val(InputBox(请输入一个整数(其实是字符))) Prim = True For i = 2 To N - 1 if N Mod i = 0 Then Prim = False else Prim = True end if Next i if Prim = True Then Print Yes else Print No end if 上机验证:当N=13(质数)时正确,但是当N=16(合数)时错误。 试图修改:把True和False换个位置? 逻辑上显然错了 当输入N = 16时 先假设为True i=2,N mod i=0, Prim赋值为False 逻辑正确 i=3,N mod i0, Prim赋值为True 逻辑错误 i=4,N mod i=0, Prim赋值为False 逻辑正确 …… i=15,N mod i0,Prim赋值为True 逻辑错误 最后一个i最关键 正确的做法 (第5页的程序) 质数的因子比合数的少,因此应该先假设为因子少的情况(True),然后找更多的因子,找到后改变标记(False)。 循环前已经假设过的情况(True)不要重复赋值 程序优化 减少循环的次数 优化一 正整数N的因子都是成对出现的,以sqr(N)为分界线,两边一一对应,因此只要循环到sqr(N)即可。 优化二 如果正整数N的因子有多个,例如N=16,除了1和16,还有2、4、8都是它的因子,但是循环时发现16 mod 2=0,这时候就已经可以断定16为False,后面的都不用判断了,可以强行退出循环。 程序后的程序 尽量减少循环次数 N = Val(InputBox(请输入一个整数(其实是字符))) prim = True For i = 2 To Sqr(N) if N Mod i = 0 Then prim = False Exit For 循环还没结束,强行退出。 End If Next i If prim = True Then Print Yes Else Print No End If 完整的正确程序 (Free Basic版) Input N Prim = 1 For i = 2 to SQR(N) if N Mod i = 0 Then Prim = 0

文档评论(0)

jackzjh + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档