Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- $result = []; // объявляем массив для складирования результатов (пар чисел)
- for ($i = 1; $i <= 10000; $i++) { // цикл от 1 до 10000 включительно
- /*
- Тут можо сделать "вложенный цикл", но тогда мы получим 100 млн итераций и упадём в тайм-аут.
- Чтобы не делать второй цикл, учитывая, что отрезки у нас одинаковые (от 1 до 10 000),
- можно тупо считать сумму делителей от индекса первого цикла ($i) и принимать её
- за второе число ($second) при условии, что она менее 10 000.
- После считаем сумму делителей нашего второго числа, сравниваем с первым и не забываем
- отсечь совершенные числа ($i != $second).
- */
- $second = getSumm(getDivisors($i));
- if ($second <= 10000 && $i != $second && getSumm(getDivisors($second)) == $i)
- array_push($result, [$i, $second]); // добавляем пары вложенными массивами в результиирующий массив
- }
- var_dump($result); // смотрим результат
- function getDivisors($num) { // объявляем функцию, где $num — заданное число
- $result = []; // рабочий массив
- for ($i = 1; $i < $num; $i++) // перебираем циклом все числа от 1 до нашего числа
- if ($num % $i == 0) // если остаток от деления заданного числа на текущее в цикле равен 0, то…
- array_push($result, $i); // …помещаем текущее число в рабочий массив
- return $result; // возвращаем рабочий массив как результат работы функции
- }
- function getSumm($arr) { // самописная функция для суммирования элементов массива $arr
- $i = 0;
- foreach ($arr as $val) // по-элементно перебираем массив и суммируем элементы
- $i += $val;
- return $i; // возвращаем результат работы функции
- }
Advertisement
Add Comment
Please, Sign In to add comment