所以我制作了这个函数来打印间隔 L,U:
1 之间的大素数。这个函数对于小数字正确运行。
2. 当我尝试在 IDEONE.com 上打印两个大数之间的质数(例如,100000000 和 100100000)
时,它说:Linux 上的运行时错误信号:25
(使用终端)它说:浮点异常(核心转储)
在这个从小数到大数的转换过程中可能出了什么问题?
//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;
}
编辑:我通过从我的计算中消除 primes[] (检查评论)中未使用的间隔解决了这个问题。这可能会大大减少计算次数(标记的 while 语句中的计算量减少了 10 倍。)感谢所有回复的人。