在C中搜索素数时遇到问题

时间:2014-03-27 01:42:21

标签: c function primes

我很困惑地搜索1到1000之间的所有素数。我正在尝试这样做并且每行打印13个。我的代码适用于前5个数字,然后结束。这是我到目前为止,我目前的输出是12357.任何想法是什么错?提前谢谢!

void removenonprimes(int d, int ary[]) {
  int i;
  int h = 0;

  for (i = 0; i < sizeof(ary); i++) {
    h = ary[i];
    if (h % d == 0 || h == d) {
      ary[i] = 0;
    }
  }
}

void prnt(int ary[]) {
  int i;
  int holder;
  int count = 0;

  for (i = 0; i < sizeof(ary); i++) {

    if (i > 1) {
      removenonprimes(i, ary);

      holder = ary[i];

      //case for when number is not 13th in its line
      if (holder != 0 && count != 13) {
        printf("%d", holder);
        count++;
      }
      //case for when number is 13th in its line
      else if (holder != 0 && count == 13) {
        printf("%d\n", holder);
        count = 0;
      }
    } else {
      printf("  %d", ary[i]);
    }
  }
}

3 个答案:

答案 0 :(得分:2)

您无法检查sizeof(ary),因为sizeof(ary)返回数组指针的大小,而不是数组的大小。 您需要将大小(1000)作为参数传递给函数,或使用全局常量。

void prnt(int ary[], arySize){

...

for(i = 0; i < ary; i++){

并将其称为

prnt(nums, 1000);

你需要为你的removenonprimes功能做类似的事情。

答案 1 :(得分:0)

  1. 在你使用的for循环中,&#34; i&lt;的sizeof(数据);&#34;我没有看到声明的数据。
  2. divisor声明在哪里?
  3. 我相信第1点会解决你的问题,你应该看一下数组的长度。

答案 2 :(得分:0)

确定数组中元素的数量:

int n = sizeof(ary) / sizeof(int);

for(i = 0; i < n; i++)