Guest User

Untitled

a guest
Jul 31st, 2021
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.71 KB | None | 0 0
  1. <?php
  2. $result = [];                                       // объявляем массив для складирования результатов (пар чисел)
  3. for ($i = 1; $i <= 10000; $i++) {                   // цикл от 1 до 10000 включительно
  4.  
  5.     /*
  6.     Тут можо сделать "вложенный цикл", но тогда мы получим 100 млн итераций и упадём в тайм-аут.
  7.     Чтобы не делать второй цикл, учитывая, что отрезки у нас одинаковые (от 1 до 10 000),
  8.     можно тупо считать сумму делителей от индекса первого цикла ($i) и принимать её
  9.     за второе число ($second) при условии, что она менее 10 000.
  10.     После считаем сумму делителей нашего второго числа, сравниваем с первым и не забываем
  11.     отсечь совершенные числа ($i != $second).
  12.    */
  13.  
  14.     $second = getSumm(getDivisors($i));
  15.     if ($second <= 10000 && $i != $second && getSumm(getDivisors($second)) == $i)
  16.         array_push($result, [$i, $second]);         // добавляем пары вложенными массивами в результиирующий массив
  17. }
  18. var_dump($result);  // смотрим результат
  19.  
  20. function getDivisors($num) {                        // объявляем функцию, где $num  — заданное число
  21.     $result = [];                                   // рабочий массив
  22.     for ($i = 1; $i < $num; $i++)                   // перебираем циклом все числа от 1 до нашего числа
  23.         if ($num % $i == 0)                         // если остаток от деления заданного числа на текущее в цикле равен 0, то…
  24.             array_push($result, $i);                // …помещаем текущее число в рабочий массив
  25.     return $result;                                 // возвращаем рабочий массив как результат работы функции
  26. }
  27.  
  28. function getSumm($arr) {                            // самописная функция для суммирования элементов массива $arr
  29.     $i = 0;
  30.     foreach ($arr as $val)                          // по-элементно перебираем массив и суммируем элементы
  31.         $i += $val;
  32.     return $i;                                      // возвращаем результат работы функции
  33. }
Advertisement
Add Comment
Please, Sign In to add comment