c - 请解释一下这个素数生成器代码是如何工作的(C语言)

标签 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语句中可以用函数作为条件,for循环条件中为什么poss_prime要除以二。谢谢。

最佳答案

函数prime()的返回类型是一个整数。将函数调用放在if语句中相当于

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

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

但是,如果您使用 bool 作为 prime 的返回类型,以明确这是一个真/假情况,那就更清楚了。

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

关于c - 请解释一下这个素数生成器代码是如何工作的(C语言),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10676966/

相关文章:

C:我编写了一个程序来按升序对数组进行排序,但无法找出 for 循环中某个步骤的原因

windows - 如何从批处理例程中输出特定行?

c - 存储用户的数组值并在存储数组的位置打印它(仅使用数组和 for 循环)

c - c 中的大质数

c - Apache Camel 和 C 的架构建议

c++ - 如何在每次循环迭代之前清除屏幕?

c++ - For循环设置变量条件

algorithm - 有什么方法可以通过乘以某个素数来拆分数字

R:返回质因数和指数

c - 如何使用 C 在 linux 中指定时区