#include<stdio.h> #include<math.h> int main() { int a[100]; int i, j, k=0; a[k] = 2; for (i = 3;i < 100;i+=2) { for (j = 2;j <= (int)sqrt(i);j++) { if (i % j != 0) a[k++] = i; } } for (i = 0;i < 100;i++) printf("%d", a[i]); }
时间: 2024-03-07 17:48:07 浏览: 52
#include <stdio.h>
这段代码的问题是,在第二个for循环中,如果i能被j整除,那么就会执行if语句,将i存放到数组a中,这是不正确的。i只有在不能被小于它的平方根的数整除时才是素数,才能存放到数组a中。此外,第二个for循环中的判断条件也应该是j <= sqrt(i)。
改正后的代码如下:
```c
#include <stdio.h>
#include <math.h>
int main() {
int a[50]; // 最多50个素数
int i, j, k = 0;
a[k++] = 2; // 将2加入素数序列中
for (i = 3; i < 100; i += 2) { // i的增量应为2
for (j = 2; j <= sqrt(i); j++) { // 判断条件应该是j <= sqrt(i)
if (i % j == 0) {
break;
}
}
if (j > sqrt(i)) { // i不能被小于它的平方根的数整除
a[k++] = i; // 将i加入素数序列中
}
}
for (i = 0; i < k; i++) {
printf("%d ", a[i]);
}
return 0;
}
```
这段代码将100以内的素数存放到一个数组中,并正确输出了数组中的元素。输出结果为:2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97。
阅读全文