【发布时间】:2018-12-29 17:04:58
【问题描述】:
好的,所以我遇到了这个挑战,我必须打印从 1 到 100 的所有素数...但是我的代码中有一个我无法找到的错误。以下是我认为应该解决的问题:
- 对于从 3 到 100 的任何数字,请检查素数数组中是否有任何其他数字将其除以。如果有这个数不是素数。如果没有这个数是素数,应该添加到数组中。很简单,对吧? 但是它不起作用。
这是我的代码:
#include <stdio.h>
int main() {
int Primes[50] = {0};
int i, j, k;
Primes[0] = 2;
Primes[1] = 3;
for (i = 3; i < 101; i++) {
for (j = 2; j < 100; j++) {
if (i % Primes[j] != 0 && Primes[j] != 0) {
Primes[j] = i;
}
}
}
printf("Primes array : \n");
for (k = 0; k < 51; k++) {
printf("%d ", Primes[k]);
}
return 0;
}
【问题讨论】:
-
for循环约束似乎是错误的(尤其是内部循环)。你最好检查你的算法,搜索互联网......你的方法需要在内部 for 循环中使用(当然是递增的)第三个变量(主要计数器)。 -
嗨,
for(j=2;j<100;j++)后跟Primes[j]=i;会导致分段错误,因为 j 运行到 100 但您将 Primes 大小定义为 50,而且您已经将 Primes[0] 设置为零,所以 @ 987654327@ 应该是Primes[1]=2;下一行相同.. -
for(k=0;k<51;k++)应该是for(k=0;k<49;k++),因为数组索引从 0 开始