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