我正在试着做一个程序来检查一个给定的数字是否是质数。然而,我的程序只给了我两个时间表,我不知道为什么。
这是我的主课:

#include <stdio.h>
#include "defs.h"
#include "checkprime.c"


int Prime[MaxPrimes];

int main()
{
  int UpperBound;
  int N;
  int *ba = &UpperBound;

  printf("enter upper bound\n");
  scanf("%d",ba);

  Prime[2] = 1;

  for (N = 3; N <= *ba; N+= 2)
  {
    CheckPrime(N);
    if (Prime[N]== 1) printf("%d is a prime\n",N);
  }
}

这是我的支票
#include "defs.h"
#include "externs.h"


int CheckPrime(int K)
{

  int J;


  J = 2;

  while (1)
  {
    if (Prime[J] == 1)
    {
      if (K % J == 0)
      {
         Prime[K] = 0;
         return 0;
      }
      J++;
    }
    break;
  }

  Prime[K] = 1;
}

最佳答案

循环退出条件下存在着一些问题。请改为使用以下内容:

int CheckPrime(int K)
{
    int J;

    for (J=2; J*J <= K; J++) {
        if (Prime[J] == 1) {
            if (K % J == 0) {
                Prime[K] = 0;
                return 0;
            }
        }
    }

    Prime[K] = 1;
    return 1;
}

剩下的部分应该能适应这种变化。

关于c - 我的Checkprime.c程序怎么了?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35486705/

10-12 00:41
查看更多