在线编译器 C

#include <stdio.h> int main() { int num,i=1,sum=0; scanf("%d",&num); while(i<=num){ if(num%i==0) sum++; i++; } if(sum == 2) printf("YES"); else printf("NO"); return 0; }
这段代码的功能是判断输入的一个整数是否为质数。它通过计算这个数有多少个因子(能整除它的数),如果因子个数恰好为2,就输出"YES",否则输出"NO"。

- 你的循环条件 `while(i<=num)` 会导致循环次数过多。对于判断质数,只需要检查到 `num` 的平方根即可,因为大于平方根的因子必然对应一个小于平方根的因子。如果检查到 `num` 本身,那么 `num` 本身也会被计入因子,导致所有数(包括质数)的因子个数至少为2,但这样会错误地把1也判断为质数(因为1的因子只有1个)。
- 注意当 `num` 为1时,循环结束后 `sum` 的值是多少?1的因子只有1个,但你的代码会输出什么?你需要考虑边界情况。