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

本文介绍了一种高效寻找1至n之间所有素数的方法——埃拉托色尼筛法,并通过C语言代码实现了该算法。埃拉托色尼筛法通过逐步筛除已知素数的倍数来找到所有素数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

埃拉托色尼筛法  求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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值