一尘不染

素数算法

algorithm

谁能告诉我如何在C语言中实现Eratosthenes算法的筛选?我需要生成质数,但是我的算法很慢。

我的代码:

#include <stdio.h>

int prime(long int i)
{
    long int j;
    int state = 1;
    for(j=2;j<i;j++)
    {
        if((i%j)==0){state=0;break;}
    }
    return state;
}

int main()
{
    int t;
    long int m,n,i;
    scanf("%d", &t);
    while(t--) {
        scanf("%d %d", &m,&n);
        for(i=m;i<=n;i++)
        {
            if(i==1){
                //do nothing for 1
            } else{
                if(prime(i))printf("%d\n",i);
            }
        }
    }
    return 0;
}

t 是测试用例的数量m,n是要打印素数的范围。


阅读 228

收藏
2020-07-28

共1个答案

一尘不染

您需要创建一个布尔数组,该数组与要查找的最大素数一样大。在开始时,它已完全初始化为true。

i如果i是素数,则此数组的th单元将为true ,否则为false。

i=2:质数开始迭代,然后将索引倍数为2的任何单元格设置为false。转到下一个质数(i=3)并执行相同的操作。转到下一个素数(它是i=5i=4不是素数:array[4]在处理时设置为false
i=2),然后一次又一次地执行相同操作。

2020-07-28