Online Compiler C

#include <stdio.h> int is_prime(int n, int delitel){ if(n%delitel==0&&delitel<=n){ return 0; } if(n%2!=0&&delitel<=n){ return (is_prime(n,delitel+1));} } int main() { int x,all; scanf("%d",&x); all=is_prime(x,2); if(all==1){ printf("YES"); }else printf("NO"); return 0; }
这段代码试图判断一个整数是否为质数,但存在逻辑错误。函数 `is_prime` 的递归实现没有正确处理所有情况,导致结果不可靠。

- 第一个 `if` 条件中,当 `n%delitel==0` 且 `delitel<=n` 时返回0,但这里没有排除 `delitel` 等于 `n` 的情况。如果 `delitel` 等于 `n`,说明已经检查到自身,此时应该返回1(质数),而不是0。
- 第二个 `if` 条件中,只对奇数进行递归,但忽略了偶数的情况(除了2)。如果 `n` 是偶数且大于2,函数会直接结束而不返回任何值,导致未定义行为。