Online Compiler C

#include <stdio.h> int main() { int m, n, sum = 0, j; scanf("%d%d", &m, &n); if (m == 1) { sum++; } 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)所有质数的个数。它通过逐个检查每个数是否为质数来累加计数。

- 代码中有一个特殊情况处理:当 m 等于 1 时,直接给 sum 加 1。但 1 不是质数,这个处理逻辑是错误的,会导致结果多算一个数。
- 内层循环判断质数的方式是统计 m 的因子个数,如果因子个数恰好为 2 则认为是质数。但循环从 i=1 开始,会漏掉对 m 本身作为因子的判断,因为循环条件 i <= m 且 i 在判断后递增,当 i 等于 m 时,j = m % m 结果为 0,但此时 i 已经递增为 m+1,循环结束,所以 m 本身作为因子没有被计入。这会导致质数判断错误,例如 m=2 时,因子只有 1 被计入,counter=1,不会被判定为质数。