0
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 を 2 で割る理由がわかりません。ありがとうございました。

4

2 に答える 2

2

関数のprime()戻り値の型は整数です。関数呼び出しを if ステートメントに入れることは、次と同等です。

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

後でその戻り値を必要としない場合、これはより適切な方法です。C の論理式は数値引数も受け入れます。0 は false で、正の整数はすべて true です。負の整数の結果がわかりません。

ただし、素数の戻り値の型として bool を使用した場合は、真/偽の状況であることを明確にするために、より明確になります。

素数ジェネレーター自体については、その数のすべての因数をチェックしています。元の値 (それ自体を除く) の半分を超える因数を持つことはできません。これが、for ループが可能な素数の値の半分だけになる理由です。

于 2012-05-20T20:53:02.690 に答える
0

基本的なプログラミング。

この関数primeは、検出内容に応じて 1 または 0 を返します。C では、0 は「false」を意味し、1 は「true」を意味します。

2 で割った場合、最小の因数は 2 であるため、因数がある場合、その数の半分以下でなければなりません。

于 2012-05-20T20:38:07.833 に答える