我在C中编写了程序,用于通过Sieve of Eratosthene找到素数(这是Kochan的6-8练习,C第4版编程)。它工作得很好。
#include <stdio.h>
int main(void) {
int prime[151], i, j;
for(i = 2; i < 151; ++i)
prime[i] = i;
for(i = 2; i <= 150; ++i)
if(prime[i])
for(j = i+i; j <= 150; j += i)
prime[j] = 0;
for(i = 2; i < 150; ++i)
if(prime[i])
printf("%i ", prime[i]);
printf("\n");
return 0;
}
但在我达到这种形式的代码之前,我尝试使用for循环:
for(i = 2; prime[i] && i < 150; ++i)
如果声明和我认为需要以与第一个变体相同的方式工作,那个表单一个接一个地保存。但它在3号后停止! 谁能解释一下为什么for循环中的那个条件会这样?
P.S。是的,我知道这个程序的算法并不是最好的。
答案 0 :(得分:2)
不,他们不一样:
prime[i]
将变为false
,循环将停止)。答案 1 :(得分:0)
for
循环的中间部分,就像while
,而不是if
。因此,只要找到prime[i]
为0
的位置并将其编入索引,循环就会终止。