Online Compiler C

#include <stdio.h> int main() { int m, n, sum = 0, j; scanf("%d%d", &m, &n); while (m <= n) { int i = 1, counter = 0; while (i <= m) { j = m % i; i++; if (j == 0) { counter++; } } if (counter == 2) { sum++; } m++; } printf("%d", sum); return 0; }
这段代码的功能是统计从 m 到 n 之间(包含两端)有多少个质数,并输出质数的个数。它使用两层循环:外层循环遍历 m 到 n 的每个数,内层循环判断当前数是否为质数(通过统计因子的个数,如果恰好有 2 个因子则认为是质数)。

- 内层循环中,变量 i 从 1 开始递增到 m,每次判断 m 是否能被 i 整除。但注意,质数的定义是大于 1 且只有 1 和自身两个因子。你的代码从 i=1 开始判断,这会导致所有数(包括 1)的因子计数都包含 1,而 1 本身不是质数。你需要考虑如何调整循环的起始值或判断条件,使得因子计数只包含大于 1 且小于等于 m 的因子,或者直接排除 1 和 m 本身的影响。

- 另外,当 m 等于 1 时,内层循环会统计出 counter=1(只有因子 1),但 1 不是质数。你的代码中 counter==2 的判断会错误地将 1 排除,但更根本的问题是,对于所有数,因子计数都包含了 1,这会导致质数判断的逻辑不准确。你需要思考如何修改内层循环的范围,使得只检查从 2 到 m-1 的因子,或者调整计数方式。