【发布时间】:2020-03-03 19:53:19
【问题描述】:
我已经用 C 编写了埃拉托色尼筛法,但是当我从 int i = 6 开始时,我的 for 循环需要更长的时间。
int *tmp = NULL;
tmp = malloc(sizeof(int) * 1000000);
tmp[0] = 2;
tmp[1] = 3;
tmp[2] = 5;
int prim_ = 3;
bool hasdiv = false;
clock_t t;
t = clock();
for(int i = 6; i < 1000000; i++) {
for (int j = 0; j < prim_; j++){
if (i % tmp[j] == 0) {
hasdiv = true;
break;
}
}
if (!hasdiv) {
prim_++;
tmp[prim_] = i;
}
hasdiv = false;
}
t = clock() - t;
double tim = ((double)t) / CLOCKS_PER_SEC;
printf("%f",tim);
与
for(int i = 6; i < 1000000; i++) {
需要 8.4 秒
for(int i = 0; i < 1000000; i++) {
需要 0.009 秒。行为从何而来?
我将 VS 19 社区与 MSVC 14.24.28314 一起使用。
【问题讨论】:
标签: c loops for-loop sieve-of-eratosthenes