поэтому я сделал эту функцию для печати больших простых чисел между интервалами 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). Спасибо всем, кто ответил.
проверить подпись
double sqrt(double x)
какое максимальное значение оно может принять.