В данный момент читаю книгу Шлосснейгла (да-да, я в курсе, какого она года) и вижу такой код проверки числа на простоту: PHP: function is_prime($number) { if(($number % 2) != 0) { return true; } for($i=0; $i < $number; $i++) { // A cheap check to see if $i is even if( ($i & 1) == 0 ) { continue; } if ( ($number % $i ) == 0) { return false; } } return true; } По его логике, если число делится на 2 с остатком оно простое? У него там с головой все в порядке? Проверяем PHP: $p = is_prime(9); var_dump($p); Получаем bool(true). Это что вообще такое?
Это либо автор был пьян, либо переводчик и редактор российского издания были пьяны. Книги пишут люди. Если что-то напечатано, оно не становится истиной в последней инстанции и несет никаких гарантий не бредовости содержания.
Это в оригинале. И что, что пьян? Это не какая-то случайная ошибка, типа под пивасом перепутал в JS поля и вместо adress прописал address, это буквальное незнание самых основ. Мало того, он этот код продублировал 2 раза, через for (то, что я привел) и через while. И там такое уже условие! Мало того, если ты проверил число на остаток от 2, нафига его на четность проверять, да еще и битовым оператором? Если оно было нечетное, так уже return вылетел, и дальше код не выполняется.
@Таська, просто эта функция для проверки четности числа, а не его "простоты". К тому-же это пример того, как не надо делать эту проверку (четности числа), используя цикл while.
Что такой код корявый - автора можно понять. Пример автором выбран неудачный. Он себе мозг выел переделывая код многократно. Наверняка в самом начале стояла проверка на четность: PHP: if(($number % 2) == 0) { return false; } которую он решил перевернуть (2 - тоже простое число) в самом конце написания примера, когда мозг уже кипел. От того и получился такой код.
Прежде чем выводы такие делать, изучи сначала основы, либо обосраться так на глазах у всех можно. Имя функции своей можно по разному задать, хоть и: PHP: function you_nub ( ... ) {} а логическое действие будет выполняться совсем с другим смыслом
Ало, дурак! Ты в своему уме? Какой смысл в том, чтобы называть функцию не так, что она делает? Ты совсем дурак?
@Таська, @MouseZver вместо того, чтобы спорить о названии функции - предложите свою реализацию на php для небольших чисел. Скажем, до 1000.
@Таська как дите малое ноешь "в чем смысл". Я тебе олень тупой еще раз продиктую: любое название хоть в мд5 хеше назови, это ни как не повлияет на логику / содержимое / изменение данных. Тут дело не в смысловой нагрузке. А поверхностное понимание "что делает этот рычах / педаль" Ты баба совсем безмозглая или тупую детскую дуру врубила "не хочу это слышать но хочу чтобы мне доказали". Пошла накуй тогда учить основы. --- Добавлено --- @Maputo смысл, если это существо фиг понимает, читая тонны книжек
@MouseZver, судя по комментариям у вас обоих запала хватит не на одну такую функцию - почему бы не потратить силы на кусочек кода?
Если все еще актуален вопрос проверки числа на простоту, то для проверки одного числа на простоту сгодится и такой код: PHP: function is_prime($hu) { $hh=pow($hu,0.5); for($i=0 ; $i<$hh ; $i++) if ($hu%$i==0) return false; return true; }
Потому что этот код был написан за 2 минуты, не тестировался, и даже не запускался. С двойки надо начинать, верно подметили.
))) сколько ошибок то)). 0,1, отрицательные понятно.. Двойка то чем не угодила? PHP: function is_prime($hu) { if (!is_int($hu)) return false; if ($hu<2) return false; $hh=(int)(pow($hu,0.5)); for($i=2 ; $i<=$hh ; $i++) if ($hu%$i==0) return false; return true; }