你的代码中存在几个问题:
1. 你在循环中的 j 的初始值是 0,然后你在 if 语句中使用了 i % j,当 j 为 0 时,这将导致除以零的错误。你应该将 j 的初始值设为 2。
2. 你的素数判断逻辑是错误的。你的代码是只要找到一个能被 i 整除的数就认为 i 不是素数,这是错误的。正确的素数判断逻辑应该是:只有当一个数只有 1 和它自身能够整除,那么这个数就是素数。
3. 你没有初始化 sum,这可能导致未定义的行为。你应该在使用之前将 sum 初始化为 0。
以下是修正后的代码:
#include <stdio.h>
int main () {
int i, j;
long int sum = 0;
for (i = 2; i < 10000; i++) {
for (j = 2; j * j <= i; j++) {
if (i % j == 0) {
break;
}
}
if (j * j > i) {
sum++;
}
}
printf("1-10000共有%ld个素数\
", sum);
return 0;
}
这个代码首先将 i 从 2 开始遍历到 10000,然后对于每一个 i,都从 2 遍历到 sqrt(i),如果在这个过程中发现有任何一个 j 能够整除 i,那么就跳出内层的循环。如果没有找到这样的 j,那么就说明 i 是一个素数,将 sum 加一。最后,输出 sum 的值,即 1 到 10000 之间的素数的个数。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案 |