0. ОПРЕДЕЛЕНИЯ
Последовательность представляет собой список номеров. Ряд представляет собой сумму списка чисел.
Множество натуральных чисел содержит все «неотрицательные целые числа больше нуля». Делитель (в данном контексте) из натурального J представляет собой натуральное число я , таким образом, что J ÷ я также натуральное число.
1. ПРЕАМБУЛА
В паре других вопросов на этом сайте упоминается понятие аликвоты или последовательности делителей натурального числа a, которые меньше a . Определение дружественных чисел включает вычисление суммы этих делителей, называемой аликвотной суммой или аликвотным рядом. Каждое натуральное число имеет свою собственную сумму аликвот, хотя значение суммы аликвот числа не обязательно уникально для этого числа. ( Например , каждое простое число имеет аликвоту 1.)
2. ВЫЗОВ
Если задано натуральное число n
, верните n
цифру последовательности аликвотных сумм. Первые несколько серий в последовательности, начиная с серии за 1:
{0, 1, 1, 3, 1, 6, 1, 7, 4, 8, 1, 16, 1, 10, 9, 15, 1, 21, 1, 22, 11, 14, 1, 36, 6, 16, 13}
Объединенные, они выглядят как:
0113161748116110915121122111413661613
В зависимости от ваших предпочтений, ввод может быть с нулевой или одной индексацией. Решения должны быть программами или функциями, способными возвращать 10 000-ю цифру (ввод до 9999
или 10000
). Самое короткое рабочее решение побеждает.
3. ТЕСТОВЫЕ СЛУЧАИ
Правильные пары ввода-вывода должны включать, но не ограничиваются следующим:
0 or 1 -> 0
4 or 5 -> 1
12 or 13 -> 6
9999 or 10000 -> 7
Число, предшествующее «или», имеет индекс 0; число после 1 индексируется.
Дополнительные тестовые случаи могут быть предоставлены по запросу.
4. ССЫЛКИ
OEIS имеет список номеров и их аликвотные суммы.
Ответы:
05AB1E ,
141110 байтВычислить n = 9999 примерно за 15 секунд. Код:
Объяснение:
Использует кодировку CP-1252 . Попробуйте онлайн! ,
источник
Mathematica, 51 байт
Безымянная функция, которая принимает и возвращает целое число и использует индексирование на основе 1. Обрабатывает ввод
10000
мгновенно.объяснение
Это очень прямая реализация определения, использующая тот факт, что
n
суммы первых делителей всегда достаточно для определенияn
цифры th. Как обычно, порядок чтения Mathematica в гольфе немного смешной:Это создает список со всеми результатами применения безымянной функции слева ко всем значениям
i
от1
доn
включительно.Мы начнем с вычисления делителей
i
, их суммированияTr
и вычитанияi
, так что это просто сумма делителей меньше, чемi
.Это превращает результат в список десятичных цифр.
И это удаляет заголовок «списка», так что все списки цифр автоматически объединяются в результате
Array
. Подробнее о том##
, как это работает, см. В разделе «Последовательность аргументов» в этом посте .Наконец, мы выбираем
n
th цифру из результата.источник
Брахилог , 40 байт
Это индексируется 1, занимает около 0,15 секунды
N = 100
, 15 секундN = 1000
. Я в настоящее время баллотируюсьN = 10000
, я сообщу время выполнения, как только оно закончится (Если моя оценка верна, это должно занять около 8 часов)Изменить : исправив распространение преждевременных ограничений в Brachylog, теперь это (для кода длиной 3 байта) занимает около
2.5
минуты,10000
но возвращаетout of global stack
ошибку.объяснение
Главный предикат:
Input = N
Предикат 1: вычисляет сумму делителей
Предикат 2: объединяет вывод с делителем ввода
источник
-G
опции. По умолчанию только128M
. Вы можете использовать, например:swipl -G2G
использовать 2 GO.Pyth,
26212015 байтПопробуйте онлайн. Тестирование.
Использует индексирование на основе 0. Программа на O (n²) завершается для n = 9999 примерно за 14 минут на моей машине 2008 года.
источник
f!%dTr1d
намного короче (но и медленнее)f!%TYtUT
это то, что я имел раньшеЖеле,
131110 байт2 байта благодаря @Adnan и еще 1 благодаря @Dennis.
Попробуйте онлайн!
Использует индексирование на основе 1. Завершается при n = 10000 менее чем за 2 секунды онлайн.
источник
ÆDṖSDµ€Fị@
сохраняет байт.€
ко всей первой цепочке?€
применяется кchain.pop() if chain else chains.pop()
. Вновь начатая цепочка пуста, поэтому вместо нее используется последняя законченная цепочка.PHP, 90 байт
0 проиндексировано
Абсолютно не тонкий или с умным подходом к нему вообще.
Также, как обычно, выдает три уведомления, которые игнорируются.
источник
J , 34 байта
Он индексируется нулем и использует приведенную ниже формулу для расчета сумм делителей.
объяснение
источник
MATL ,
1615 байтИндексирование основано на 1.
Последний тестовый пример истекает в онлайн-компиляторе, но он дает правильный результат с автономным компилятором, примерно через 15 секунд.
Попробуйте онлайн!
источник
Haskell, 52 байта
Пример использования:
(([1..]>>= \n->show$sum[m|m<-[1..n-1],mod n m<1])!!) 12
->6
.Это прямая реализация определения: foreach
n
sum - это делители и преобразовать их в строку. Объедините все такие строки и выберите элемент по запрошенному индексу. Лень Хаскелла отбираетn
из бесконечного списка только столько s,[1..]
сколько нужно.источник
Python 3.5,
1039392 байта:Довольно простая реализация метода, описанного в посте.
Попробуйте онлайн! (Ideone)
Не совсем завершается в течение выделенных 5 секунд в онлайн-компиляторе для ввода
10000
, но завершается на моей машине для того же ввода в течение примерно 8,5 секунд.источник
Октава, 71 байт
Это только октава. Это не будет работать в MATLAB. Создается виртуальная функция, которая работает с 1-индексированными числами. Вероятно, это может быть упрощено немного дальше. Посмотрим сегодня вечером.
Вы можете попробовать онлайн здесь .
Просто запустите приведенную выше команду с префиксом
a=
или с чем- либо (только для того, чтобы вы могли использовать ее несколько раз), а затем сделайтеa(10000)
или как угодно. Требуется приблизительно 7 секунд, чтобы вычислить, что 10000-ая цифра - 7.источник
Java 8, 220 байт
Ну, это как минимум быстро. В среднем 0,3 секунды получается 9999/10000-го элемента на моей машине. Он генерирует столько сумм аликвот, сколько и указанный вами индекс. Это означает, что в большинстве случаев строка будет немного длиннее, чем ваш индекс, поскольку некоторые аликвотные суммы имеют 2 или более цифр, но по большей части генерирует только такую длину строки, которая нам нужна.
Использование:
Ungolfed:
источник