【发布时间】:2014-03-22 20:39:41
【问题描述】:
我需要制作一个打印所有素数的程序,这是我已经完成的:
#include <stdio.h>
int main(void) {
long long t,m,n,i,i2,i3,found;
float p;
scanf ("%lld" , &t);
for (i=1;i<=t;i++) {
scanf ("%lld%lld" , &m ,&n);
for (i2=m;i2<=n;i2++) {
found=0;
for (i3=2;i3<=i2/2;i3++) {
p=(float)i2/i3;
p=p-i2/i3;
if (p==0) {
found=1;
}
}
if ((found==0) && (i2!=1)) {
printf ("%lld\n" , i2);
}
}
printf ("\n");
}
return 0;
}
我的时间限制是 6 秒,使用此代码是不可能的,m 和 n 之间的差异最大为 100000,并且 1
【问题讨论】:
-
跳过偶数。通过除以数字的平方根而不是其一半来检查素数。
-
你的程序是
O(n^3)。 -
编写比你的算法慢的算法将是一个挑战。网上有很多很多帖子,在 SO 和其他地方,讨论生成素数的有效方法......你有没有寻找 任何?
-
参见stackoverflow.com/a/20749428/849891 和其中的链接。