Prime Generator(spoj)

时间:2015-01-24 04:51:36

标签: c

有关确切问题,请参阅此link

这里我定义了三个函数,在另一个函数中称为selves。 函数调用未完成

#include<stdio.h>
int primegen(int x1,int x2);
int isprime(int j);
int main(){
   int x,n1,n2,i;
   printf("Enter the number of test cases:");
   scanf("%d",&x);
    for(i=0;i<x;i++){
      printf("enter the starting point and ending point:");
      scanf("%d %d",&n1,&n2);
      primegen(n1,n2);
    }
    return 0;
}

int primegen(int x1,int x2){
   int k;
   if(x2>x1){
      for(k=x1;k<x2;k++){
        if(isprime(k))
        {
           printf("%d",k);
        }
      }
      return 0;
   }
}

int isprime(int j){
   int i,c=0;
   for (i=1;i<=j;i++)
   {
     if(j%i==0){
        c++;
     }
     if(c!=2){
        return 0;
     }
     else{
        return 1;
     }
   }
}

输出

此代码没有输出。

4 个答案:

答案 0 :(得分:1)

采取以下外部循环:

if(c!=2){
    return 0;
}
else{
    return 1;
}

答案 1 :(得分:1)

问题出在isprime()的循环中。 在这里你使用c的值仍为0.因此,c!= 2将导致为true,并且将返回0并且您将得不到任何答案。 从for循环中删除此特定语句,因为您需要计算总数。除数。

for (i=1;i<=j;i++)
   {
     if(j%i==0)
        c++; 
   }
if(c!=2)
  return 0;
else
  return 1;

或者你可以这样做:

int isprime(int j){
   int i,k;
   k=sqrt(j); //include math.h for this
   for(i=2;i<=k;i++)
   { 
     if(j%i==0)
       return 1;
   }
   return 0;
}

你只需要找到任何除数,直到数字的平方根。

答案 2 :(得分:0)

如果发现它可以被整除而不是使用计数器并递增它,最好返回0。

int isprime(int j)
{
  int i;
  for(i=2;i<j;i++)
    if((j%i)==0)
      return 0;
  return 1;
}

答案 3 :(得分:0)

#include <stdio.h>
#include <math.h>
int main()
{
    int test;
    scanf("%d",&test);
    while(test--)
    {
        unsigned int low,high,i=0,j=2,k,x=0,y=0,z;
        unsigned long int a[200000],b[200000];
        scanf("%d",&low);
        scanf("%d",&high);
        for(i=low;i<=high;i++)
            a[x++]=i;
        for(i=2;i<=32000;i++)
            b[y++]=i;
        i=0;
        while(b[i]*b[i]<=high)
        {
            if(b[i]!=0)
            {
                k=i;
                for(;k<y;k+=j)
                {
                    if(k!=i)
                    {
                        b[k]=0;
                    }
                }
            }
            i+=1;j+=1;
        }
            for(i=0;i<y;i++)
            {
                if(b[i]!=0 && (b[i]>=low && b[i]<=sqrt(high)))
                    printf("%d\n",b[i]);
            }
            int c=0;
            for(i=0;i<y;i++)
            {
                if(b[i]!=0 && (b[i]>=1 && b[i]<=sqrt(high)))
                    b[c++]=b[i];
            }
            int m=a[0];
            for(i=0;i<c;i++)
            {
                z=(m/b[i])*b[i];k=z-m;
                if(k!=0)
                    k += b[i];
                for(;k<x;)
                {
                    if(a[k]!=0)
                    {
                        a[k]=0;
                    }
                    k+=b[i];
                }
            }
            for(i=0;i<x;i++)
            {
                if(a[i]!=0 && (a[i]>=2 && a[i]<=(high)))
                    printf("%d\n",a[i]);
            }
        printf("\n");
    }
    return 0;
}