写一个代码:打印100~200之间的素数

目录

题目分析:

解题思路:

代码实现:

算法优化:


题目分析:

1.素数(质数):除了1与它本身之外没有其它约数,则为素数

2.打印100~200之间的素数,即要使目标数满足素数条件来筛选

解题思路:

1.先打印100~200之间的全部数

因为涉及很多数,所以采用循环语句,100~200,每个数都打印,则初始化为数字等于100,判断数字小于201,调整数字依次递增加一,满足for循环的结构,所以此处采用for循环来打印100`200之间的全部数字(如图所示)

2.通过素数条件,筛选符合条件的数字

素数的约数只有1与它本身,所以在1与它本身的数之间,没有其它数可以作为约数,即目标数除以此范围内的任何数的余数都不等于0

因为除数是在目标数与1之间任意数,所以才用循环语句打印出这之间所有数

因为要筛选所有不能除尽的数才满足条件,所以不能包含1与目标数本身,即初始化n=2,判断n<i,用if分支语句判断是否成立,成立则打印 (如图所示)

不过此处不能直接打印,下图为错误示范

因为要把每一个n都试除,但是此程序会逐步判断,也就是每一个n一直从2增加到i,只要不是i的约数,则打印i,即多次打印所有的i(如图所示)

3.正确方法:

我们已经知道此方法错误,即我们需要将每一个n都试除,若全都不满足余数为0,则打印目标数i,只要有一个满足余数为0则不是目标数,所以此处用flag变量来表示,若有相除余数为0的情况,则改变flag的值,若其值不变,则打印目标数i(如图所示)

代码实现:

易错点:

1.int n = 0;应该放在第一个for循环内,因为每一个i都要把n从2到i本身一一试除,所以每次i变化,n的值都需要重置

2.flag原因同上

算法优化:

1.我们已经知道,素数的约数只有1和它本身,那么自然数中有奇数与偶数,所以偶数的约数一定有2(不考虑0),则除了2之外的大于1的偶数,一定不是素数,由奇数加奇数为偶数,奇数加偶数为奇数的原则,可以把i初始化101,调整为依次加2,此方法减少一半运算(如图所示)

2.是否可以继续优化?可以

通过数学经验我们知道,任何一个数它都存在一个约数小于或等于它的平方根(不考虑1)

证明如下:

反证法:,假设原命题不成立,设一个数m的平方根为n,由假设得,一定有两个数a,b为m的约数,且a,b大于n,则a*b>m,假设不成立,所以原命题成立

通过代码实现,使用sqrt()表示一个数的平方根,注意需要头文件math.h(如图所示)

3.检验是否正确:

通过设置一个变量count,每打印一个目标数i,则count++,最终看看是否到达目标总数(如图所示)

今天就总结到此,感谢您的垂阅,敬请指教,谢谢。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值