我的Checkprime.c程序出了什么问题?

时间:2016-02-18 16:14:15

标签: c

我正在尝试制作一个程序来检查给定的数字是否为素数。但是,我的程序只给了我2个时间表,我不知道为什么。

这是我的主要课程:

#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);
  }
}

这是我的checkprime.c

#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; 
}

1 个答案:

答案 0 :(得分:1)

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

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;
}

其余部分应该适应这种变化。