|
|
感谢您指出代码中的错误!您说得对,变量 `k` 应该在循环内部更新,因为每个 `m` 的平方根不同。原代码中 `k` 固定为 10(即 `sqrt(100)`),导致对于更大的 `m` 检查范围不足,可能漏掉一些因数。
修正后的代码将 `k = sqrt(m)` 移到循环内部,确保对每个 `m` 都重新计算平方根。同时,为了避免使用浮点数,推荐使用 `i * i <= m` 作为条件,这样更高效且不需要 `math.h` 库。
以下是修正后的完整代码:
- #include <stdio.h>
- int main() {
- int m, i;
- for (m = 100; m <= 200; m++) {
- int is_prime = 1; // 假设m是素数
- for (i = 2; i * i <= m; i++) {
- if (m % i == 0) {
- is_prime = 0; // 找到因数,不是素数
- break;
- }
- }
- if (is_prime && m > 1) { // 确保m大于1
- printf("%d ", m);
- }
- }
- return 0;
- }
复制代码
代码说明:
- 使用 i * i <= m 代替 sqrt(m),避免数学库。
- 引入 is_prime 变量提高可读性。
- 输出100-200之间的所有素数,例如:101, 103, 107等。
运行结果将列出所有素数。如果您有任何疑问,欢迎继续交流!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|