素数和逆序.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
素数和逆序

解题的思路: 1. 用子函数求出2到n之间的素数和 2. 将任意键入的五位以内的正整数按逆序输出,用子函数实现 方法1:“真正顺杆儿爬的思想”只能被1或自己整除的数,如n=5,7,11等,即写个for循环从1循环到n,如果定义一个变量count, 记住能整除的数的个数,则所有的素数都只有两次整除发生,而非素数就肯定大于2次整除! 这样循环完成后,根据count变量是否等于2就可以判断该数是否是素数。 方法2:只能被1或自己整除的数,若想成只要能被1或自己整除,显然不对!所有的数均如此,没法判断是不是素数。 所以反过来想: 将i逐一除以2~i-1,均不能整除,只要有一次整除,该数就不是素数。 用子函数求出2到n之间的素数和 任意键入一个整数i,判断i是否是素数。(之后再加外循环求出2到100间的素数和)。 分析:利用计算机的特点,为了判断i是不是素数,可以让i除以2~i-1 之间的每一个数,只要有一个能整除,就不是素数,如9除以2, 3,能被3整除,9就不是素数。 标志变量的经典用法! flag=1标志该数是素数,在循环前就默认设置为1,即先假设该数是素数;循环中只要有一次能整除(如9能被3整除),就说明它不是素数,就要将flag改成0;将2到i-1之间的所有数都一一试过,均不能整除时,(如7被2到6整除一遍没有一次整除发生,flag=0没发生),循环完后根据flag还是1,没被改的话,这个数才是素数;如5被2,3,4均试一遍都不能整除,其它素数如3,5,7,11,13,都一样,多试几次均对才算成功…… 注意:必须循环除完2,3,4…. i-1之后,才能有结论,只除一个数不能整除如9%2!=0说明不了什么问题,(竿里没有)若急着处理如下: for(j=2;j=i-1;j++) if ( i%j==0 ) flag=0; else flag=1; 只除一个数不能整除(如9%2!=0)说明不了什么问题,(竿 里没有)不要急着处理;此处急着在一个数不能整除时就在else 分支写flag=1是就处理错了!“竿里“有的是有一个数能整除,就 不是素数,如9除以2,3,能被3整,9就不是素数(if (i%j==0) flag=0);但没有讲只一次不能被整除(如9%2!=0),就说明 它是素数。只有将数n被所有的2~n-1间的数都试验过了,全都 不能整除时,才能下结论说该数是素数! 循环体中只有一个简单 的if语句,不必写else 分支;等循环结束后,(与for语句对齐) 才能根据标志变量判断该数是否是素数! 若将判断一个数是不是素数写成一个子函数,在主函数中完成求和运算,最方便的做法是子函数在一个数为素数时返回这个数,为非素数时返回0; 这样主函数直接加子函数的返回值即可完成任务。 此题可优化之处: 1. 因为12=3*4,所以只要查到3能不能整除就可以了,不必再查4,所以循环次数可以少写一半从2检查到sqrt(n),而不必到n-1。 2.一旦有一次整除发生,就没必要再进行下去,已经肯定不是素数了,应该用break语句断掉循环。 3.由于所有的偶数都不可能是素数,求素数和时,自然去掉偶数,写成for(i=3;in-1;i++,i++),这样循环次数能少近一半。 2. 将任意键入的五位以内的正整数按逆序输出,用子函数实现 1)分析:此题代表一大类从整数中取出某位进行处理的题目!利用符号‵/′和‵%′求解整数的各个位数,关键是:个位数ge=x%10,余下的数(如123去掉个位后的12)用 x/10表示。 2)此题的竿儿是要逆序输出:自然先输出个位、再输出十位…,麻烦的是预先不知道是几位数,所以没法用for循环,若用for 要分成一位数、两位数、三位数…五种情况,太繁琐就肯定绕路了! 2. 将任意键入的五位以内的正整数按逆序输出,用子函数实现 避开的办法就是选用while 和do while(当输入0时二者不同),先输出个位(x%10,如123的3),然后取出剩下的数(x=x/10,即12)再去循环输出其个位2。。。如此循环至显示完最高位(此时剩下的数1/10肯定是0)就可以结束了!所以循环的条件可以写成剩下的数不等于0,即while(x!=0),不管几位数循环到剩下的数为0就退出结束了。(实质是每循环一次,就显示一个数字,具体几位数就循环显示几次,如4位数4次,5位数5次。循环体内只有两个语句。) 先考虑只判断一个数是不是素数 先考虑只判断一个数是不是素数

文档评论(0)

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

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

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档