Определение
Целое положительное число n
является практическим числом (последовательность OEIS A005153 ), если все меньшие положительные целые числа могут быть представлены в виде сумм различных делителей n
.
Например, 18
это практическое число: его делители равны 1, 2, 3, 6, 9 и 18, а остальные натуральные числа меньше 18 можно сформировать следующим образом:
4 = 1 + 3 5 = 2 + 3 7 = 1 + 6
8 = 2 + 6 10 = 1 + 9 11 = 2 + 9
12 = 3 + 9 = 1 + 2 + 9 = 1 + 2 + 3 + 6
13 = 1 + 3 + 9 14 = 2 + 3 + 9 15 = 6 + 9
16 = 1 + 6 + 9 17 = 2 + 6 + 9
Но 14
это не практическое число: его делителями являются 1, 2, 7 и 14, и нет подмножества их, которое добавляет к 4, 5, 6, 11, 12 или 13.
Вызов
Напишите программу, функцию или глагол, которые принимают в качестве входных данных положительное целое число x
и либо возвращают, либо выводят на печать x- е практическое число, индексированное от 1 для соответствия OEIS. Ваш код должен быть достаточно эффективным, чтобы он мог обрабатывать ввод до 250000 менее чем за две минуты на приемлемом настольном компьютере. (Примечание: моя эталонная реализация в Java управляет 250000 менее чем за 0,5 секунды, а моя эталонная реализация в Python управляет ею за 12 секунд).
Контрольные примеры
Input Expected output
1 1
8 18
1000 6500
250000 2764000
1000000 12214770
3000000 39258256