在线编译器 C

#include <stdio.h> int is_prime(int n, int delitel){ if(n%delitel==0&&delitel<=n){ return 1; } if(n%delitel!=0&&delitel<=n){return 0; }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` 的递归条件不正确,导致结果总是错误的。

- 函数 `is_prime` 中,当 `n % delitel == 0` 时返回 1 表示“是素数”,这正好反了。实际上,如果 `n` 能被某个 `delitel` 整除(且 `delitel` 不等于 1 和 `n` 本身),说明 `n` 不是素数,应该返回 0。
- 递归的终止条件不完整。当 `delitel` 大于 `n` 的平方根时,可以确定 `n` 是素数,但你的代码中 `delitel <= n` 的条件会导致递归一直进行到 `delitel` 等于 `n` 才停止,效率低且逻辑混乱。你应该考虑在 `delitel * delitel > n` 时返回 1(表示是素数)。