как побороть сигнал ошибки времени выполнения: 25? эквивалентно, ошибка с плавающей запятой: ядро ​​сброшено?

поэтому я сделал эту функцию для печати больших простых чисел между интервалами L, U:
1. Эта функция работает правильно для небольших чисел.
2. Когда я пытаюсь напечатать простые числа между двумя большими числами (например, 100000000 и 100100000),
на IDEONE.com, это говорит: сигнал ошибки времени выполнения: 25
в Linux (с использованием терминала) написано: исключение с плавающей точкой (дамп памяти)

что могло пойти не так в этом процессе перевода из маленьких чисел в большие?

//primes[] stores all the primes between 2 and sqrt(1000000000)

void check(long long L,long long U,long long primes[])
{
long long g=0,i=0,d;
if(L==1)
L++;
long long v=sqrt(1000000000);
for(long long k=L;k<U+1;k++)
{
i=0;
d=sqrt(k);
while(i<=v)     //this statement...
{
if(primes[i]<=d)
{
if(k%primes[i]==0)
{g=1;break;}
++i;
}
else
break;
}

if(g==0)
{
cout<<k<<endl;
}
g=0;
}
return;
}

РЕДАКТИРОВАТЬ: Я решил проблему, удалив неиспользуемые интервалы из простых чисел [] (проверить комментарии) из моих расчетов. Это, вероятно, значительно уменьшило количество вычислений (в 10 раз меньше вычислений в отмеченном выражении while). Спасибо всем, кто ответил.

0

Решение

проверить подпись

double sqrt(double x)

какое максимальное значение оно может принять.

0

Другие решения


По вопросам рекламы [email protected]