Online Compiler C

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

- 当 `n` 能被 `delitel` 整除时,函数返回 1,这表示“是素数”,但正确的逻辑应该是:如果能被 2 到 n-1 之间的某个数整除,则不是素数。你需要重新思考返回值的含义。
- 递归的终止条件不清晰。当 `delitel` 等于 `n` 时返回 0,但此时应该已经检查完所有可能的除数,如果之前没有返回 1,则 `n` 是素数。你需要调整条件判断的顺序和返回值。