Мне нужно найти наивысшее простое число в заданном диапазоне.
Вот мой код, который работает 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
Да, проблема алгоритмическая …
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; } } } ?>
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; } }?>
спасибо за ваш ответ Samuel Cook .. но мне нужно, не используя функцию gmp_nextprime (). iamgetting message 'Call to undefined function gmp_intval () в C: \ wamp \ www \ highprime.php в строке 5' – user1659450 16 минут тому назад
Поскольку вам трудно получить 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; }
Самый простой метод, который вы можете использовать, – это деление числа, начиная с 3 с массивом, заполненным 2, если модуль (%) дает вам ответ, отличный от 0, он является простым. После того, как вы получили рабочий код, подумайте, что я могу сделать лучше?
Попытайтесь применить их на своем коде или просто google рабочую версию.