Online Compiler C

#include <stdio.h> int main() { int a, b, count = 0, j = 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 { 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,然后遍历区间内的每个数,判断是否为素数。但代码中存在逻辑错误,导致结果不正确。

- 变量 j 在每次判断新数字 i 时没有重置为 0,导致之前循环的余数计数会累积到下一个数字的判断中,使得后续数字的 j 值错误。
- 内层循环条件 `c * c < i` 应该是 `c * c <= i`,否则会漏掉 i 是完全平方数的情况(例如 i=4,c=2 时 c*c=4 不小于 4,循环不执行,误判为素数)。