在线编译器 C

#include <stdio.h> int is_prime(int n, int delitel){ if(n%delitel==0&&delitel<=n){ return 1; } 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` 的递归条件不完整,导致某些情况下没有返回值,而且判断素数的条件写反了。

- 函数 `is_prime` 中,当 `n%delitel==0` 时返回 1,这表示“有因数”,但你的意图应该是“不是素数”。返回 1 和 0 的含义需要和主函数中的 `if(all==1)` 对应起来。
- 递归的终止条件不完整:当 `delitel` 超过 `n` 的平方根或等于 `n` 时,应该返回一个表示“是素数”的值,但你的代码中缺少这个分支,可能导致函数没有返回值。