找到给定范围内的最高素数

时间:2012-12-26 08:00:32

标签: php arrays primes

我需要找到给定范围内的最高素数 这是我的代码,适用于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

4 个答案:

答案 0 :(得分:5)

gmp_nextprime()

<?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)

  

thanks for your reply Samuel Cook ..but i need without using 'gmp_nextprime()' function.. iamgetting message 'Call to undefined function gmp_intval() in C:\wamp\www\highprime.php on line 5' – user1659450 16 mins ago

由于您很难让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,那就是素数。 然后,在你得到一个有效的代码后,我想我能做些什么呢?

  • 你可以说我想忽略偶数!那么为什么要迭代呢?只需使用i = i + 2(并以3作为种子素数开始)
  • 我分数太多了!你真的需要检查21%11,21%13,21%17,21%19?它们总是小于2,所以我们忽略素数&gt;一半
  • 优化更多?如何限制使用root作为代码中的最大值影响它?为什么?
  • 更多?为什么我不能事先消除所有非素数并检查剩下的是什么?

尝试在您的代码上应用这些内容,或者只是google工作版本。