在线编译器 C

#include <stdio.h> int main() {int n,a=2; scanf("%d",&n); if (n==2){ printf("YES"); return 0;} if (n==1||n==0){ printf("NO"); return 0;} while (a<n){ if (n%a==0){ printf("NO"); return 0; } a++;} {printf("YES");} return 0; }
这段代码的功能是判断用户输入的一个整数是否为质数。它从2开始检查,如果n能被某个小于n的数整除,就输出NO并结束;如果循环结束都没有找到因子,就输出YES。

- 你的代码在判断质数时,循环条件 `a < n` 会检查所有小于n的数,但实际只需要检查到n的平方根即可,因为如果n有大于平方根的因子,必然也有一个小于平方根的因子。这可以提高效率,但这不是主要问题。

- 主要问题在于:当n是2时,你直接输出YES并返回,这是正确的。但当n是其他质数时,循环结束后会输出YES。但你的代码在循环结束后用了一个单独的代码块 `{printf("YES");}`,这个写法虽然能工作,但不够清晰。更关键的是,如果n是负数或大于2的偶数,你的代码也能正确判断,但有一个边界情况:当n是2时,你提前返回了,所以没问题。但请思考一下,如果n是大于2的偶数,比如4,循环第一次就会输出NO并返回,这也是正确的。

- 提示:你的代码逻辑基本正确,但有一个潜在问题:当n是质数时,循环结束后输出YES,但你的代码在循环外用了花括号,这没有语法错误,但风格上可以改进。另外,考虑一下如果n是负数或0,你的代码会输出NO,这是合理的,因为质数定义为大于1的自然数。但请检查一下,当n是2时,你的代码直接返回YES,这是正确的。整体来看,代码功能正确,但可以更简洁。