C语言 素数筛

求n值范围内的所有素数,这种题可以用素数筛的方法来做。
以100为例,首先定义一个大于100的数组来进行100个数的储存。
在这里插入图片描述
由于素数是从2开始的,所以需要从2开遍历整个数组,由于数组是定义在全局区所以会自动初始化为0,规定以数字0代表该下标数为素数,而数字1代表该下标数不是素数,首先2是素数,而接下来将2在100以内的所有倍数全部标记为1,而将prime[0] 作为纪录总共有多少个素数的计数器,并且将数组的前几个数重写入素数,所以这个列表有三个作用:1.代表着所有数是否是素数的标记表;2.prime[0]为素数个数的计数器;3.数组前几个被重写为所有纪录到的素数。而这会遇到的问题是1.被之前的数筛过后的下一个标记为0 的数一定是素数?因为之前的数都不是它的因数,所以它是素数;2.纪录用的表会不会超过正在判断的数?答案是不会,因为偶数不会是素数,也说明素数的下一个不会是素数也就是说两个素数间至少会隔一位。
在这里插入图片描述
来测试一下:
在这里插入图片描述
结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值