Online Compiler C

#include <stdio.h> int main() { int m, n, i=1, j; scanf("%d%d", &m, &n); int sum, counter; 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` 在外层循环开始前只初始化了一次,之后一直递增,不会回到1;`counter` 也从未清零,导致累加的是所有数字的因数总数,而不是当前数字的因数个数。

- 检查 `i` 和 `counter` 的初始化位置:它们应该在每次开始判断一个新数字时重新设置,而不是在循环外部只设置一次。
- 注意 `i` 的递增时机:当前代码在判断因数时 `i` 会一直增加,但判断下一个数字时 `i` 没有重置,导致后续数字的因数检查从错误的值开始。