谁能告诉我如何在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是要打印素数的范围。
t
您需要创建一个布尔数组,该数组与要查找的最大素数一样大。在开始时,它已完全初始化为true。
i如果i是素数,则此数组的th单元将为true ,否则为false。
i
从i=2:质数开始迭代,然后将索引倍数为2的任何单元格设置为false。转到下一个质数(i=3)并执行相同的操作。转到下一个素数(它是i=5:i=4不是素数:array[4]在处理时设置为false i=2),然后一次又一次地执行相同操作。
i=2
i=3
i=5
i=4
array[4]