Witam, dostałem na zadanie napisać program, który napisałem, ale nie przechodzi testów.
Bardzo proszę o pomoc w znalezieniu błędów.
Z góry dziękuję i pozdrawiam.
Napisz program do zliczania liczb pierwszych w zadanym przedziale wykorzystując Sito Eratostenesa.
Wejście
Pierwsza linia wejscia zawiera liczbe całkowita z <1;2*10^9> – liczbe zapytan,
których opisy wystepuja kolejno po sobie. Opis jednego zapytania składa sie z jednej linii
zawierajacej dwie liczby naturalne a oraz b <1;10^7>.
Wyjście
Dla kazdego zapytania w osobnej linii wypisz jedna liczbe odpowiadajaca na pytanie
ile liczb pierwszych znajduje sie w przedziale [a, b] (łacznie z a i b).
Pamięć: 52mb
Przykład
Przykład
Dla danych wejsciowych: Poprawna odpowiedzia jest:
8
1 10 4
1 100 25
500 1000 73
2 18 7
24 28 0
1 35 11
40 71 8
301 350 8
Sprawdzarka pokazuje błąd RTE czyli:
błąd wykonania (runtime error): w czasie działania programu wystąpił błąd, który spowodował jego przerwanie. Typową przyczyną w C++ jest tzw. segmentation fault, czyli odwołanie się do niewłaściwej komórki pamięci (wyjechanie za tablicę, użycie złego wskaźnika), ale też błąd operacji arytmetycznej (dzielenie przez zero), czy nawet zakończenie programu z kodem wyjścia innym niż 0.
int main()
{
long int a,b,z,i,k;
long int P[10000001] ;
for (i=2;i<=10000000;i=i+1)
P[i]=1;
P[0]=0;
P[1]=0;
for (i=2;i<=10000000;i=i+1)
{
if(P[i])
{
for (k=2;k*i<=10000000;k=k+1)
P[k*i]=0;
}
}
scanf ("%d",&z);
for (i=1;i<=z;i=i+1)
{
k=0;
scanf ("%d%d",&a,&b);
for (i=a;i<=b;i=i+1)
k=(k+P[i]);
printf ("%d\n",k);
}
return 0;
}