Online Compiler C

#include <stdio.h> int is_prime(int n, int delitel){ if(n%2==0&&delitel<=n){ printf("0"); 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` 的递归逻辑不完整,缺少判断质数的核心条件(比如当 `delitel` 等于 `n` 时应该返回什么)。
- 当 `n` 是偶数时,函数直接打印 `0` 并返回字符 `'0'`,但主函数期望返回值是整数 `1` 或 `0`,字符 `'0'` 的整数值是48,会导致判断错误。
- 递归终止条件不清晰,没有处理 `delitel` 超过 `n` 的情况,也没有正确返回质数判断结果。

- 提示1:质数判断的递归思路应该是:如果 `delitel` 等于 `n`,说明没有找到因数,返回1表示质数;如果 `n` 能被 `delitel` 整除,返回0表示不是质数;否则继续递归检查 `delitel+1`。
- 提示2:函数中不应该在内部打印结果,应该只通过返回值传递信息,让主函数根据返回值决定输出 `YES` 或 `NO`。