Online Compiler C

#include <stdio.h> int main() { int m, n, i = 1, j; scanf("%d%d", &m, &n); int sum = 0, counter = 0; while (m <= n) { while (i <= m) { j = m % i; i++; if (j == 0) { counter++; } } if (counter == 2) { sum++; } m++; } printf("%d", sum); return 0; }
这段代码试图统计区间 [m, n] 内质数的个数,但存在逻辑错误。

主要问题在于变量 `i` 和 `counter` 的初始化位置不对。`i` 和 `counter` 只在程序开始时初始化了一次,但在外层循环每次检查新的 `m` 时,它们没有被重置。这会导致内层循环的除数 `i` 从上次结束的值继续增加,而不是从 1 重新开始,同时 `counter` 也会累积之前所有数的因子计数,而不是只针对当前 `m`。

- 内层循环的 `i` 应该在外层循环每次迭代时重新初始化为 1,否则除数会不断增大,无法正确判断每个数的因子个数。
- `counter` 也应该在外层循环每次迭代时重置为 0,否则它会累加所有数的因子总数,导致判断条件失效。