我需要找到给定范围内的最高素数 这是我的代码,适用于0-100,但如果我给0-125它显示素数为125。
<?php
$flag=0;
$b=125;
for($i=$b;$i>=0;$i--)
{
if($i%2!=0)
{
for($b=3;$b<10;$b++)
{
if($flag==0)
{
echo('<br>');
if($i%$b!=0)
{
echo('highest prime number is'.$i);
$flag=1;
break;
}
elseif ($i%$b==0)
{
break;
}
}
}
}
}
?>
在上面的代码中,我的范围是0-125
答案 0 :(得分:5)
<?php
$start = 125;
$stop = 0;
for($x=$start;$x>=$stop;$x--){
if(($prime = gmp_intval(gmp_nextprime($x)))<$start){
echo 'The highest prime is '.$prime;
break;
}
}?>
答案 1 :(得分:1)
由于您很难让gmp functions
工作,所以您可以使用
示例1:无GMP功能
$range = range(125, 0); // create the range
foreach ( $range as $v ) {
if (isPrime($v)) {
printf('highest prime number is %d', $v);
break;
}
}
如果你能够使gmp工作,那么你可以使用gmp_prob_prime
使用的功能
示例1:使用gmp功能
foreach ( $range as $v ) {
if (gmp_prob_prime($v) == 2) {
printf('highest prime number is %d', $v);
break;
}
}
输出
highest prime number is 113
使用的功能
function isPrime($num) {
if ($num == 1)
return false;
if ($num == 2)
return true;
if ($num % 2 == 0) {
return false;
}
for($i = 3; $i <= ceil(sqrt($num)); $i = $i + 2) {
if ($num % $i == 0)
return false;
}
return true;
}
答案 2 :(得分:0)
是的,问题是算法......
1)您需要检查sqrt($b)
,即本例中为11
2)$flag
逻辑有点乱,没有用改变标志然后在......之后爆发......
<?php
$flag=0;
$b=125;
$sq=sqrt($b);
for($i=$b;$i>=0;$i--)
{
if($i%2!=0)
{
for($b=3;$b<=$sq;$b++)
{
if($i%$b!=0)
{
$flag=1;
}
elseif($i%$b==0)
{
$flag=0;
break;
}
}
if($flag==1){
echo('highest prime number is '.$i);
break;
}
}
}
?>
答案 3 :(得分:0)
你可以使用的最简单的方法是将一个从3开始的数字除以一个填充为2的数组,如果模数(%)给你的答案不是0,那就是素数。 然后,在你得到一个有效的代码后,我想我能做些什么呢?
尝试在您的代码上应用这些内容,或者只是google工作版本。