Учитывая положительное целое число n , вычислить значение функции Мертенса M ( n ) где
и μ ( k ) - функция Мёбиуса, где μ ( k ) = 1, если k имеет четное число различных простых факторов, -1, если k имеет нечетное число различных простых факторов, и 0, если простые факторы не различны.
- Это код-гольф, поэтому создайте кратчайший код для функции или программы, которая вычисляет функцию Мертенса для входного целого числа n > 0.
- Это последовательность OEIS A002321 .
Тестовые случаи
n M(n)
1 1
2 0
3 -1
4 -1
5 -2
6 -1
7 -2
8 -2
9 -2
10 -1
117 -5
5525 5
7044 -25
8888 4
10000 -23
Ответы:
Желе , 6 байт
Попробуйте онлайн! или проверьте меньшие контрольные примеры . (занимает некоторое время)
Фон
Это использует свойство
из A002321 , что приводит к следующей рекурсивной формуле.
Как это устроено
источник
Mathematica,
2220 байтСпасибо @miles за сохранение 2 байта.
объяснение
Создайте список от 1 до ввода.
Найти
MoebiusMu
каждого номераПодведите итог.
источник
Python 2,
4537 байтПроверьте это на Ideone .
Фон
Это использует свойство
из A002321 , что приводит к следующей рекурсивной формуле.
Как это устроено
Мы используем рекурсию не только для вычисления M для частных, но и для вычисления суммы этих изображений. Это экономит 8 байт по сравнению со следующей простой реализацией.
Когда f вызывается с одним аргументом n , необязательный аргумент k по умолчанию равен 2 .
Если п = 1 ,
n<k
дает Правда , и е возвращает это значение. Это наш базовый случай.Если n> 1 ,
n<k
изначально возвращает False и выполняется следующий кодor
.f(n/k)
Рекурсивно вычисляет один член суммы, который вычитается из возвращаемого значенияf(n,k+1)
. Последний увеличивает k и рекурсивно вызывает f , перебирая, таким образом, возможные значения k . Как только n <k + 1 или n = 1 ,f(n,k+1)
вернется 1 , заканчивая рекурсию.источник
05AB1E ,
1615 байтобъяснение
Попробуйте онлайн!
источник
Brachylog ,
2220 байтПопробуйте онлайн!
объяснение
источник
Желе , 9 байт
Попробуйте онлайн! или проверьте все контрольные примеры .
Как это устроено
источник
Haskell,
2927 байтисточник
Желе , 7 байт
Не очень эффективно; детерминанты сложны.
Попробуйте онлайн! или проверьте меньшие контрольные примеры . (занимает некоторое время)
Фон
Это использует формулу от A002321 :
M (n) - определитель булевой матрицы A n × n , где a i, j равно 1, если j = 1 или i | J и 0 в противном случае.
Как это устроено
источник
PHP, 113 байт
Насколько я знаю, в php отсутствует что-то вроде функциональности простых чисел, так что это своего рода боль. Возможно, это возможно сделать лучше.
использовать как:
источник
Ракетка 103 байта
Ungolfed:
источник
CJam (20 байтов)
Онлайн демо
Использует формулу от OEIS
и оператор запоминания CJam
j
.рассечение
источник
JavaScript (ES6), 50 байт
Порт @ Денниса Python ответ.
источник
Юлия,
2625 байтПопробуйте онлайн!
Фон
Это использует свойство
из A002321 , что приводит к следующей рекурсивной формуле.
Как это устроено
Переопределяем унарный оператор ! для наших целей.
n÷(2:n)
вычисляет все необходимые коэффициенты, наши переопределены ! отображается на них, и, наконец, сумма всех рекурсивных вызовов вычитается из 1 .К сожалению,
не работает, так как двоичная сумма будет подавлена пустой коллекцией.
исправляет это, но не сохраняет байты и возвращает True для ввода 1 .
источник
C
51 5047 байтовРедактировать: Спасибо @Dennis за -3 байта!
источник
Scala, 53 байта
Порт Денниса ответит питином.
Я вызвал метод
?
, который является токеном, который не привязан к буквам.источник
Pyth, 12 байт
Определяет функцию,
y
которая принимаетn
.Тестовый набор здесь. (Обратите внимание, что конечный результат
y
заключается в вызове объявленной функции.)источник
На самом деле
181716 байтПредложения по игре в гольф приветствуются. Попробуйте онлайн!
Ungolfing
источник
PARI / GP, 24 байта
источник
J, 19 байт
Вычисляет функцию Мертенса,
n
используя сумму функции Мёбиуса по диапазону[1, n]
.использование
объяснение
источник