筛法求素数c语言详解_埃拉托色尼筛法 求1~n之间的素数

  • Post author:
  • Post category:其他



埃拉托色尼筛法  求1~n之间的素数

埃拉托色尼筛法介绍:

要得到自然数n以内的全部素数,必须把不大于

的所有素数的倍数剔除,剩下的就是素数。[1]

给出要筛数值的范围n,找出以内的素数。先用2去筛,即把2留下,把2的倍数剔除掉;再用下一个质数,也就是3筛,把3留下,把3的倍数剔除掉;接下去用下一个质数5筛,把5留下,把5的倍数剔除掉;不断重复下去……。

代码实现:

#include

#include

void checkprime(int n);

int main() {

int n;

scanf(“%d”, &n);

checkprime(n);

return 0;

}

void checkprime(int n) {                       /*埃拉托色尼筛法*/

int i, j, cnt;

int* a = (int*)malloc(sizeof(int) * (n + 1));

for (i = 0; i < n; i++)

a[i] = 1;              //先将数组a中所有元素全部设成1,即假设全为素数

cnt = 0;

for (i = 2; i * i <= n; i++)     /* i 只需要遍历到根号n/

if (a[i])                           //如果i是素数

for (j = i; j * i < n; j++)

a[j * i] = 0;            /* 将其倍数全部删掉 */

for (i = 2; i <= n; i++)

if (a[i]) {                          //处理完后a[i] = 1则说明i是素数

cnt++;

printf(“%4d%s”, i, cnt % 10 ? ” ” : “\n”);             //每10个换行

}

free(a);                                       //释放空间

}

15404708f10f8a96481abffef702292f.png



版权声明:本文为weixin_39936403原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。