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) { i= 1; while (i <= m) { j = m % i; i++; if (j == 0) { counter++; } } if (counter == 2) { sum++; } m++; } printf("%d", sum); return 0; }
这段代码试图统计区间 [m, n] 内质数的个数,但存在逻辑错误。

代码的思路是:对于每个数 m,用内层循环检查它有多少个因子(通过取余判断是否能整除),如果因子个数恰好为2,就认为它是质数,然后 sum 加1。

主要问题在于变量 counter 没有在每次检查新数时重置为0。当内层循环结束后,counter 会累积之前所有数的因子计数,导致后续判断出错。

- 检查内层 while 循环开始前,counter 是否被重置为0。当前代码中 counter 只在程序开始时初始化了一次,之后从未重置。
- 思考一下,对于每个待检查的数 m,因子计数应该从0开始重新统计。