用于素数发生器的C中的运行时错误

时间:2015-11-17 14:28:41

标签: c

我试图解决spoj.com中的素数生成器问题。我解决了它,它在我的机器上完美运行。但在将解决方案提交到在线后,它会显示运行时错误。请帮帮我!

有没有人可以查看我的代码并告诉问题在哪里?

    #include <stdio.h>

    int primeFactor[350],w=0,z,i;

    main()
    {
        int m[9],n[9],t=0,tMax,j;
        scanf("%d",&tMax);
        while(t<tMax)
         {
           scanf("%d%d",&m[t],&n[t]);
           primeFactors(n[t]);
           t++;
          }
      for(j=0;j<tMax;j++)
      {
        for(z=m[j];z<=n[j];z++)
         {
           if(z>1)
             primeCalc(z);
          }
         printf("\n\n");
       }
    }

   primeFactors(int a)
    {
      int remainder;

      for(z=2;z<=sqrt(a);z++)
       {
          if(z==2) {primeFactor[w]=z; w++;}
          else
            {
              for(i=2;i<z;i++)
                {
                  if(z%i==0)
                    {
                      remainder=z%i;
                      break;
                     }
                   else {remainder=z%i;}
              }
            if(remainder!=0)
                {
                   primeFactor[w]=z;
                   w++;
                }
            }
        }
       return 0;
     }
   primeCalc(int x)
      {
         int remainder;
         if(x==2)
           {
            printf("%d\n",x);
            }
          else
            {
             for(i=0;i<w;i++)
               {
                 if(primeFactor[i]>=x)
                 break;
                 else if(x%primeFactor[i]==0)
                    {
                      remainder=x%primeFactor[i];
                      break;
                    }
                  else
                    {remainder=x%primeFactor[i];}
                 }
              if(remainder!=0)
                printf("%d\n",x);
        }
        return 0;
    }

1 个答案:

答案 0 :(得分:0)

您的main函数可能返回一些不确定的值,因为它没有任何return语句,并且判断可能将其视为运行时错误。 您必须从0函数返回main

此外,您不应该省略每个函数的返回类型。

试试这个:

#include <stdio.h>

int primeFactor[350],w=0,z,i;

int main(void)
{
    int m[9],n[9],t=0,tMax,j;
    scanf("%d",&tMax);
    while(t<tMax)
    {
        scanf("%d%d",&m[t],&n[t]);
        primeFactors(n[t]);
        t++;
    }
    for(j=0;j<tMax;j++)
    {
        for(z=m[j];z<=n[j];z++)
        {
            if(z>1)
            primeCalc(z);
        }
        printf("\n\n");
    }
    return 0;
}

int primeFactors(int a)
{
    int remainder;

    for(z=2;z<=sqrt(a);z++)
    {
        if(z==2) {primeFactor[w]=z; w++;}
        else
        {
            for(i=2;i<z;i++)
            {
                if(z%i==0)
                {
                    remainder=z%i;
                    break;
                }
                else {remainder=z%i;}
            }
            if(remainder!=0)
            {
                primeFactor[w]=z;
                w++;
            }
        }
    }
    return 0;
}
int primeCalc(int x)
{
    int remainder;
    if(x==2)
    {
        printf("%d\n",x);
    }
    else
    {
        for(i=0;i<w;i++)
        {
            if(primeFactor[i]>=x)
                break;
            else if(x%primeFactor[i]==0)
            {
                remainder=x%primeFactor[i];
                break;
            }
            else
            {remainder=x%primeFactor[i];}
        }
        if(remainder!=0)
            printf("%d\n",x);
    }
    return 0;
}