基本上是扫描一遍就出来了,counter++放在if语句的前面,最终counter为10970,如果放在后面最终counter为9743 #include <stdio.h> static bool result[10000] = {0}; void fun() { bool* p = &result[0]; for (int i = 0; i < 10000; i++) *p++ = true; int t; static int counter = 0; for (int i = 2; i < 10000; i++) { if (!result[i]) continue; for (int j = i; j < 10000; j++) { if (!result[j] && (j % i != 0)) continue; t = i * j; if (t > 10000) break; counter++; result[t] = false; } } cout << counter << endl;//输出10970!! for (int i = 2; i < 10000; i++) if (result[i]) printf("%5d ", i); }