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

#include <math.h> #include <stdio.h> int main() { int n, m, flag = 1; scanf("%d",&n); if (n <= 1) flag = 0; for (m = 2; m <= sqrt(n); m++) { if (n % m == 0) { flag = 0; } } printf(flag?"Yes\n":"No\n") ; return 0; }
这段代码的功能是判断一个整数是否为素数(质数)。它读取用户输入的数字,通过循环检查是否有除了1和自身以外的因数,最后输出"Yes"表示是素数,"No"表示不是素数。

- 代码中使用了`sqrt(n)`作为循环上限,这是正确的优化方法,但需要包含`math.h`头文件。注意`sqrt`函数接收`double`类型参数,而`n`是`int`,这里存在隐式类型转换,虽然能工作但不够严谨。
- 当输入为2时,循环条件`m <= sqrt(2)`不成立(因为sqrt(2)≈1.414,m从2开始),循环不会执行,flag保持为1,输出"Yes",这是正确的。但输入为负数或0时,虽然`flag`被设为0,但循环中`sqrt(n)`对负数会出错,因为负数没有实数平方根。