请解释这个素数生成器代码是如何工作的(在C中)

时间:2012-05-20 20:33:48

标签: c for-loop primes

int prime (int poss_prime);  

int main() {  

    int poss_prime;  

    for (poss_prime = 2; poss_prime <= MAX_INT; poss_prime++) {  
        if (prime (poss_prime)) {  
            printf("%d ", poss_prime);  
        }  
    }  

    printf("\n\n");  
    return 0;  
}  

int prime (int poss_prime) {  

    int poss_factor;  

    for (poss_factor = 2; poss_factor <= poss_prime/2; poss_factor++) {  
        if (poss_prime % poss_factor == 0) {  
            return 0;  
        }  
    }  

    return 1;

}

我不明白为什么函数可以用作if语句中的条件,以及为什么poss_prime在for循环条件中除以2。谢谢。

2 个答案:

答案 0 :(得分:2)

函数prime()的返回类型为整数。将函数调用放在if语句中等同于

int value = prime(possprime);
if(value)

如果您之后不需要返回值,那么这只是一种更简洁的方式。 C中的逻辑表达式也接受数字参数。 0为假,任何正整数都为真。我不知道负整数的结果。

但是,如果你使用bool作为素数的返回类型,它会更清楚,以明确这是一个真/假的情况。

关于素数发生器本身:它正在检查该数字的所有因素。它不能有任何大于原始值一半的因子(不包括它自己),这就是为什么for循环只能达到可能的素数值的一半。

答案 1 :(得分:0)

基础编程。

函数prime返回1或0,具体取决于它找到的内容。在C中,0表示“假”,1表示“真​​”。

除以2,如果有任何数字因子,它必须是数字的一半或更少,因为最小的可能因子是2.