Онлайн компилятор C

#include <stdio.h> int main() { int num,i=1,sum=0; scanf("%d",&num); if(sum==1) printf("NO"); while(i<=num){ if(num%i==0) sum++; i++; } if(sum>2 ) printf("NO"); else printf("YES"); return 0; }
这段代码试图判断一个整数是否为质数,但存在逻辑错误。

- 你初始化 `sum=0`,但之后检查 `if(sum==1)` 永远为假,因为 `sum` 从未被赋值为1。这个条件判断没有意义。
- 循环中 `if(num%i==0) sum++;` 统计的是 `num` 的因数个数。对于质数,因数只有1和它本身,所以 `sum` 应为2。但你的判断条件是 `if(sum>2)` 输出"NO",这正确,但缺少对 `sum==1` 或 `sum==0` 等情况的处理。

- 提示1:考虑当输入为1时,1不是质数,但你的代码中 `sum` 初始为0,循环后 `sum` 会变成1(因为1%1==0),然后 `if(sum>2)` 不成立,会输出"YES",这是错误的。你需要单独处理 `num==1` 的情况。
- 提示2:你的 `if(sum==1)` 判断位置不对,且条件本身有误。应该把对1的特殊判断放在循环之后,或者调整逻辑,确保所有情况都能正确输出。