谁能告诉我如何实现 Sieve of Eratosthenes C中的算法?我需要生成质数,但我的算法很慢。
我的代码:
#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
是测试用例的数量,n 是要打印素数的范围。
最佳答案
您需要创建一个与要查找的最大质数一样大的 bool 数组。一开始它完全初始化为 true。
如果 i
是质数,则此类数组的第 i
单元格为真,否则为假。
从 i=2
开始迭代:它是素数,然后将索引倍数为 2 的任何单元格设置为 false。转到下一个素数 (i=3
) 并做同样的事情。转到下一个素数(它是 i=5
:i=4
不是素数:array[4]
在处理 时被设置为 false code>i=2
) 并一次又一次地做同样的事情。
关于c - 质数算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4809051/