我提交解决方案时收到time limit exceeded
错误。
<?php
$stdin = fopen('php://stdin', 'r');
$testcase = fgets($stdin);
$n=1;
while($n<=$testcase){
$start = fgets($stdin);
$end=fgets($stdin);
if($start==1) {
$start=2;
}
for($i=$start;$i<$end;$i++){
$flag=0;
for($j=2;$j<$i;$j++){
if($i%$j==0){
$flag=1;
break;
}
}
if($flag==0){
echo $i."\n";
}
}
$n++;
}
fclose($stdin);
?>
请帮助我,我遇到time limit exceeded
错误,请解释我收到此错误的原因。在我的本地版本中,它显示了正确的答案。
答案 0 :(得分:1)
你的解决方案太慢了。尝试略微修改的Eratosthenes筛。修改应该允许您的筛选仅在[开始,结束]间隔内工作。
答案 1 :(得分:0)
在第一个for循环中,而不是循环所有数字,你可以只循环奇数,因为除了2之外,所有偶数都不能是素数。
您可以先在{for循环中使用$i+=2
。这可以帮助您减少一些不必要的循环。
更新1:
同样在第二个for循环中,不是找到所有数字的模数,而是可以将计算出的素数存储在数组中并检查$i % calculated prime numbers == 0
而不是$i%$j