#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,循环不执行,误判为素数)。