所以我已经创建了这个函数,用于在区间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;
}
编辑:我通过从计算中删除primes [](检查注释)中未使用的间隔来解决问题。这可能会减少很多计算次数(在标记的while语句中计算量减少10倍。)感谢所有回复者。
答案 0 :(得分:0)
检查
的签名double sqrt(double x)
它可以采取的最大值是什么。