Найти наивысшее простое число в заданном диапазоне

Мне нужно найти наивысшее простое число в заданном диапазоне.
Вот мой код, который работает 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, он является простым. После того, как вы получили рабочий код, подумайте, что я могу сделать лучше?

  • Вы могли бы сказать, что я хочу игнорировать даже цифры! так зачем же перебирать, чем вообще? просто используйте i = i + 2 (и начните с использования 3 в качестве начального числа)
  • Я разделяю слишком много цифр! вам действительно нужно проверить 21% 11, 21% 13, 21% 17, 21% 19? Они всегда меньше 2, поэтому можно игнорировать простые числа> половину
  • Оптимизировать больше? как ограничить использование корня, как максимум в вашем коде повлиять на него? и почему ?
  • Даже больше ? почему я не мог устранить все не простые числа заранее и проверить, что осталось?

Попытайтесь применить их на своем коде или просто google рабочую версию.