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

#include <stdio.h> int main() { int n; // 读取输入 if (scanf("%d", &n) != 1) { return 0; } // 小于或等于 1 的数不是素数 if (n <= 1) { printf("NO\n"); return 0; } int is_prime = 1; // 标记变量,1 表示是素数,0 表示不是素数 // 从 2 遍历到根号 n for (int i = 2; i * i <= n; i++) { if (n % i == 0) { is_prime = 0; // 找到了其他因数,说明不是素数 break; // 跳出循环,节省时间 } } // 根据标记结果输出 if (is_prime) { printf("YES\n"); } else { printf("NO\n"); } return 0; }
这段代码的功能是判断一个整数是否为素数(质数)。它从标准输入读取一个整数,然后通过遍历从2到根号n的所有整数来检查是否存在能整除n的数。如果存在,则n不是素数;否则是素数。最后输出"YES"或"NO"。

- 代码逻辑基本正确,但有一个边界情况需要注意:当n等于2时,循环条件i * i <= n会判断2 * 2 <= 2为假,因此循环不执行,is_prime保持为1,输出"YES",这是正确的。但你可以思考一下,如果n是负数或0,代码会先输出"NO"并返回,这符合素数的定义吗?实际上,素数通常只考虑正整数,所以这个处理是合理的。

- 你的代码中使用了int类型存储n,但scanf的返回值检查只处理了读取失败的情况。如果用户输入的数字超出int范围,程序行为是未定义的。不过对于这个练习来说,这不是主要问题。