素数检查器返回任何数字作为素数。 C

时间:2014-07-28 09:57:11

标签: c if-statement primes

该程序应该打印从3到100不是素数的每个数字。 但它的行为就像它不能很好地解释最后的if语句。

#include <stdio.h>
main(){
    int i,k;
    int flag;
    for (i=3; i<100; i++) {
        for (k=2; k<=i/2; k++) {
            if (i%k == 0) {
                flag=0;
                break;
            }
        }
        if (flag==0) {
            printf("not prime : %d\n",i);
        }
    }
}

是什么事?只有当flag等于0时才打印i。我打印的所有数字从3到100都不是素数。

我很困惑。

3 个答案:

答案 0 :(得分:1)

您忘记将flag设置为非零值:

for (i = 3; i < 100; i++){
    flag = 1;
    for(k = 2; k <= i/2; ++k){
        if(i % k == 0) { 
            flag = 0; 
            break;
        }
    }
    if (flag==0)  { printf("not prime : %d\n",i); }
}

答案 1 :(得分:0)

请尝试以下代码 -

#include <stdio.h>
main(){
    int i,k;
    // int flag;
    for (i=3; i<100; i++){ 
            for (k=2; k<i; k++){ // note this loop
                    if(i%k == 0) break;
            }
            if (k!=i)  { printf(" not prime : %d\n",i); }
    }
}

在此方法中,当if(i%k == 0)为真时,循环将为break。那时,i可以ik之间的任意数字分割。因此,如果任何数字可以被1和其他数字分割,那么这不是素数。

答案 2 :(得分:0)

标志永远不会设置为零。所以它从一开始就可能为零,从你将它设置为零到程序结束之前肯定会为零。 您需要做的是在&#34; prime-finding&#34;之前将其设置为非零。 (内)循环。