Форумы портала PHP.SU » » Вопросы новичков » Получить собственные делители числа, являющиеся простыми числами

Страниц (1): [1]
 

1. Mandalorian - 07 Сентября, 2021 - 17:58:33 - перейти к сообщению
Здравствуйте! Сейчас учусь. Возникло сомнение в решении задачи.

Дано число. Необходимо получить все собственные делители этого числа, являющиеся простыми числами.

Дана функция.
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. function getPrimeDivisors($num) {
  4.         $result = [];
  5.         $divs = getOwnDivisors($num);
  6.        
  7.         foreach ($divs as $div) {
  8.                 if (isPrime($div)) {
  9.                         $result[] = $div;
  10.                 }
  11.         }
  12.                
  13.         return $result;
  14. }
  15.  


Необходимо написать реализацию вспомогательных функций.

В свою очередь я написал такой код:
PHP:
скопировать код в буфер обмена
  1.  
  2. function getOwnDivisors($num){
  3.                 for($i = 1; $i <= $num; $i++){
  4.                         if($num % $i === 0) {
  5.                                 $arr[] = $i;
  6.                         }
  7.                 }
  8.                 return $arr;
  9.         }
  10.  
  11.         function isPrime($num) {
  12.                 for($i = 2; $i < $num; $i++){
  13.                         if($num % $i === 0) {
  14.                                 return false;
  15.                         }
  16.                 }
  17.                 return true;
  18.         }
  19.  
  20. var_dump(getPrimeDivisors(...));
  21.  


Есть несколько вопросов. Первый - все ли правильно в этом коде, и если не все то что неправильно?

Второй - почему, кода я передаю в основную функцию дробное число, то она все равно ведет себя как с простыми числами? Например, передал в функцию число 23,25 а функция возвращает массив с делителями 1 и 23.

Третий - например возьмем число 12. Функция выдаст массив с числами 1,2,3. Куда подевались 6 и 12? Если же возьмем число 19 - то массив будет из чисел 1 и 19. Почему так происходит?
2. don.bidon - 07 Сентября, 2021 - 19:17:07 - перейти к сообщению
Код не читал Ваш, ломы.
2) проверяйте на входе, что пришло целое число, иначе выдавайте ошибку, на простые множители раскладываются только целые числа;
3) 6 и 12 не простые числа, что у Вас в голове? Сначала теория, потом практика, не?
3. Mandalorian - 07 Сентября, 2021 - 20:19:08 - перейти к сообщению
По поводу простых чисел прочитал, спасибо. Почему-то думал, что знаю что это. Оказывается, совсем не то)

Собственно, второй вопрос отпал теперь.
4. don.bidon - 08 Сентября, 2021 - 05:29:13 - перейти к сообщению
К коду претензий нет (всё равно глубоко не врубался, да и не помню, чтобы в юности такой алгоритм реализовывал), но по оформлению кода рекомендую придерживаться https://svyatoslav[dot]biz/misc/psr_[dot][dot][dot]nslation/#_PSR-2
Ну и отступ 4 пробела общепринят для PHP.
5. Mandalorian - 08 Сентября, 2021 - 09:32:47 - перейти к сообщению
Понял, спасибо!

 

Powered by ExBB FM 1.0 RC1