jeudi 7 juillet 2016

Run-time error occurs when input value is greater than 100000

I am trying to implement the sieve of eratosthenes in C. The code works for small input values, but once the input goes beyond a certain range, a run- time error is thrown. This is the second problem in the classical section of the SPOJ base. What is the mistake?

#include<stdio.h>
#include<math.h>
int prime(unsigned long int, unsigned long int);
int main()
{
    int nitem;
    unsigned long int sn,fn;
    scanf("%d", &nitem);
    while(nitem)
    {
        scanf("%lu", &fn);
        //printf("%d",fn);
        scanf("%lu", &sn);

        prime(fn, sn);
        nitem--;
    }
    return 0;
}

int prime(unsigned long int fn, unsigned long int sn)
{
    unsigned long int prim[100000];
    int i,j,k;
    for(i = 0; i < 100000; i++)
    {
        prim[i] = 1;
    }

    prim[0] = 0;
    prim[1] = 0;
    //printf("%d", sn);
    //printf("%d", k);
    //printf("%d", (k <= sn));
    for(k = 2; k <= sqrt(sn); k++)
    {
    //  printf("alksnc%5d", k);
        if(prim[k] == 1)
        {

            for(j = 2; (k * j) <= sn; j++)
            {
                //printf("%d", prim[k]);
                prim[k * j] = 0;

            }
        }
    }



    for(int i = 0; i <= sn; i++)
    {
        if(prim[i] !=0 && i >= fn)
        {
            printf("%lun", i);
        }
    }
    printf("n");

    return;
}

Input:

1
100000 100345

output:

run time error

Input:

1
3 5

output:

3
5

Aucun commentaire:

Enregistrer un commentaire