Online Compiler C

#include <stdio.h> int main() { int a, b, count = 0; scanf("%d%d", &a, &b); if (a > b) { int temp = a; a = b; b = temp; } for (int i = a; i <= b; i++) { if (i == 1) continue; else { int j = 0; for (int c = 2; c * c < i; c++) { if (i % c == 0) j++; } if (j == 0) count++; } } printf("%d", count); return 0; }
这段代码的功能是统计区间 [a, b] 内素数的个数。它先确保 a 不大于 b,然后遍历区间内的每个数,判断是否为素数并计数。

- 内层循环的条件 `c * c < i` 应该改为 `c * c <= i`,否则会漏判像 4 这样的完全平方数。例如当 i=4 时,c=2 时 c*c=4 不小于 4,循环不执行,导致误判为素数。
- 变量 j 的命名不够直观,建议用更有意义的名称如 `is_prime` 或 `flag`,并考虑在发现因子时直接跳出循环,避免不必要的计算。