Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Получить собственные делители числа, являющиеся простыми числами

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Уточнение по решению задачи
Mandalorian
Отправлено: 07 Сентября, 2021 - 17:58:33
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Сент. 2021  


Помог: 0 раз(а)




Здравствуйте! Сейчас учусь. Возникло сомнение в решении задачи.

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

Дана функция.
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. Почему так происходит?
 
 Top
don.bidon
Отправлено: 07 Сентября, 2021 - 19:17:07
Post Id


Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Март 2019  


Помог: 2 раз(а)




Код не читал Ваш, ломы.
2) проверяйте на входе, что пришло целое число, иначе выдавайте ошибку, на простые множители раскладываются только целые числа;
3) 6 и 12 не простые числа, что у Вас в голове? Сначала теория, потом практика, не?
 
 Top
Mandalorian
Отправлено: 07 Сентября, 2021 - 20:19:08
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Сент. 2021  


Помог: 0 раз(а)




По поводу простых чисел прочитал, спасибо. Почему-то думал, что знаю что это. Оказывается, совсем не то)

Собственно, второй вопрос отпал теперь.
 
 Top
don.bidon
Отправлено: 08 Сентября, 2021 - 05:29:13
Post Id


Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Март 2019  


Помог: 2 раз(а)




К коду претензий нет (всё равно глубоко не врубался, да и не помню, чтобы в юности такой алгоритм реализовывал), но по оформлению кода рекомендую придерживаться https://svyatoslav[dot]biz/misc/psr_[dot][dot][dot]nslation/#_PSR-2
Ну и отступ 4 пробела общепринят для PHP.

(Отредактировано автором: 08 Сентября, 2021 - 05:30:15)

 
 Top
Mandalorian
Отправлено: 08 Сентября, 2021 - 09:32:47
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Сент. 2021  


Помог: 0 раз(а)




Понял, спасибо!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB