以下是引用voidx在2011-4-10 23:18:55的发言:
其实用 sieve 完全可以的。如果注释掉 printf(), msys 测得时间也只有 100ms 左右
#include <stdio.h>
#define LMT 2000000
int main() {
char m[LMT] = {0};
int i, j;
printf ("2\t");
for (i = 3; i < LMT; i+= 2) {
if (!m) {
printf("%d\t", i);
for (j = i * 3; j < LMT; j += i * 2) {
m[j] = 1;
}
}
}
return 0;
}
其实用 sieve 完全可以的。如果注释掉 printf(), msys 测得时间也只有 100ms 左右
#include <stdio.h>
#define LMT 2000000
int main() {
char m[LMT] = {0};
int i, j;
printf ("2\t");
for (i = 3; i < LMT; i+= 2) {
if (!m) {
printf("%d\t", i);
for (j = i * 3; j < LMT; j += i * 2) {
m[j] = 1;
}
}
}
return 0;
}
⊙﹏⊙b汗~~~ 这就是算法的力量呀!!
善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。