Онлайн компилятор C

#include <stdio.h> int is_prime(int n, int delitel){ int sum; if(n==delitel){ sum++; if(sum==2){ return 1; }return 0; }if(n%delitel==0){ sum++; } return is_prime(n,delitel+1); } int main() { int m,n,all; scanf("%d%d",&m,&n); all=is_prime(m,n); printf("%d",all); return 0; }
这段代码试图用递归方式判断一个数是否为素数,但存在几个关键问题。

首先,`sum` 变量在每次递归调用时都会被重新初始化为0,因此无法累计因子的个数。其次,`main` 函数中调用 `is_prime(m,n)` 时,第二个参数传入了 `n`,这不符合函数设计的逻辑——通常应该从2开始检查除数。

- 检查 `sum` 变量的作用域:它在每次递归调用时都会重新创建,无法保存之前的结果。你需要一种方式让计数在递归过程中持续累积。
- 思考 `is_prime` 函数的第二个参数应该从什么值开始调用。在 `main` 中,你传入了 `n`,但 `n` 是用户输入的上限,不是除数起始值。