素数判断,我哪里错了啊

img


为什么这有的数学输出来不对啊,弄半天了,还是不会啊,感觉挺简单的,就是不会,求解

代码中的循环语句判断有误,应该把判断写外面,因为判断写里面只会执行一次,但是实际的判断逻辑需要你遍历完整个循环才能判断 a 是否为一个素数

img

如果要修改的话,应该把判断写在外面,这是最常见的写法:

/** primeJudge.c -- 判断一个正整数是否为质数 */
#include <stdio.h>
#include <stdbool.h>

int main(void)
{
    // 定义要判断的变量 a 和索引变量 i
    int a, i;
    
    // 从命令行中读取数据
    printf("请输入要判断的数:");
    scanf("%d", &a);
    
    // 循环判断 a 是否为素数
    bool isPrime = true;
    for (i = 2; i <= a - 1; i++)
    {
        if (a % i == 0) {
            // a 能被中间的数整除说明不是素数
            isPrime = false;
            break;
        }
    }

    if(isPrime) {
        printf("%d 是素数\n", a);
    } else {
        printf("%d 不是素数\n", a);
    }
    
    return 0;
}

或者这样写,不过这是种取巧的写法,了解就好,不建议新手尝试:

/** primeJudge.c -- 判断一个正整数是否为质数 */
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    // 定义要判断的变量 a 和索引变量 i
    int a, i;
    // 从命令行中读取数据
    printf("请输入要判断的数:");
    scanf("%d", &a);
    for (i = 2; i <= a - 1; i++)
    {
        if (a % i == 0) {
            printf("%d 不是素数\n", a);
            exit(1);
        }
    }
    printf("%d 是素数\n", a);
    return 0;
}

你要循环完了才能说是素数不是素数,不要在循环里着急打印结果