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

#include <stdio.h> int is_prime(int n, int delitel) { if (delitel * delitel > n) { return 1; } if (n % delitel == 0 || n == 1) { return 0; } return is_prime(n, delitel + 1); } int main() { printf("%d", is_prime(7, 2)); return 0; }
这段代码定义了一个递归函数 `is_prime`,用来判断一个整数 `n` 是否为质数。它从除数 `delitel` 开始检查,如果 `delitel` 的平方大于 `n`,说明没有找到因数,返回1表示是质数;如果 `n` 能被 `delitel` 整除或者 `n` 等于1,返回0表示不是质数;否则递归调用自身,将除数加1继续检查。`main` 函数中测试了 `is_prime(7, 2)` 并打印结果。

- 注意 `n == 1` 的判断位置:当 `n` 为1时,它应该直接返回0,但当前代码中,如果 `delitel * delitel > n` 不成立,才会检查 `n % delitel == 0 || n == 1`。对于 `n=1`,初始 `delitel=2`,`delitel * delitel > n` 成立(4>1),所以会先返回1,导致错误。你需要调整条件顺序,确保 `n==1` 的情况在平方判断之前被处理。
- 递归的终止条件顺序很重要:通常应该先处理特殊情况(如 `n==1`),再处理一般情况(如平方判断)。想一想如何重新排列这些条件,使得对1的判断优先执行。