Online Compiler C

#include <stdio.h> int main() { long long a,b,sum=0,late_sum=0,i=1,t=1; scanf("%lld%lld",&a,&b); i=a; while(i<=b){ while(t<=i){ if(i%t==0){ sum++; } t++;} if(sum<=2){ late_sum++; } sum=0; t=1; } printf("%lld",late_sum); return 0; }
这段代码试图统计区间 [a, b] 内质数的个数。它使用两层循环:外层循环遍历区间内的每个数 i,内层循环计算 i 的因子个数,如果因子个数不超过2(即 sum <= 2),则计数加一。

代码逻辑上存在一个关键问题:内层循环中变量 t 的初始值设置不当,导致因子判断不准确。

- 内层循环中 t 从 1 开始,但每次判断 i % t == 0 时,t 会一直增加到 i。实际上,任何数都能被 1 整除,所以 sum 至少为 1,这会影响质数判断的正确性。
- 另外,循环结束后 i 没有递增,会导致外层循环无限执行。注意 while(i<=b) 内部没有修改 i 的语句。