Учитывая, что у вас есть бесконечная последовательность чисел, определенная следующим образом:
1: 1 = 1
2: 1 + 2 = 3
3: 1 + 3 = 4
4: 1 + 2 + 4 = 7
5: 1 + 5 = 6
6: 1 + 2 + 3 + 6 = 12
7: 1 + 7 = 8
...
Последовательность представляет собой сумму делителей n
, включая 1 и n
.
Учитывая положительное целое число в x
качестве входных данных, рассчитайте наименьшее число, n
которое даст результат больше, чем x
.
Контрольные примеры
f(100) = 48, ∑ = 124
f(25000) = 7200, ∑ = 25389
f(5000000) = 1164240, ∑ = 5088960
Ожидаемый результат
Ваша программа должна возвращать как n
и сумму его делителей, например так:
$ ./challenge 100
48,124
правила
Это код-гольф, поэтому выигрывает самый короткий код в байтах на каждом языке.
n
s делителей? Вы, вероятно, захотите заявить об этом явно.n
и другоеf(n)
, но вы нигде не говорите об этом в спецификации.f(1000) = 48
? Делитель сумма48
составляет124
Ответы:
Брахилог , 9 байт
Эта программа принимает входные данные из «выходной переменной»
.
и выводит их во «входную переменную»?
. Попробуйте онлайн!объяснение
Неявная переменная
N
перечисляется в порядке возрастания, поэтому для вывода используется ее наименьшее допустимое значение.источник
Желе ,
18121110 байтПопробуйте онлайн!
-1 байт благодаря мистеру Xcoder !
Как это устроено
источник
1
это необходимо и как¥
действует?1
говорит ,#
чтобы начать отсчет с 1 и¥
принимает предыдущие две ссылки (Æs
и>
) , и применяет их в качестве диады (т.е. с двумя аргументами), с левым аргументом является итерация, а правый аргумент является вход.#
в некоторых случаях меня это немного смущало.Wolfram Language (Mathematica) , 53 байта
Попробуйте онлайн!
Пытается использовать все значения от 2 до x + 1, где x - это ввод.
(
Select
Возвращает список всех значений, которые работают, но функция{#,f@#}&
принимает все это как входные данные, а затем игнорирует все свои входные данные, кроме первого.)источник
R , 71 байт
Попробуйте онлайн!
источник
x
.Шелуха ,
1211 байт-1 байт, спасибо @Zgarb!
Попробуйте онлайн!
источник
,
не работает (или вывод занимает слишком много времени?).R , 73 байта
Попробуйте онлайн!
Превзойденный в жертву Duckmayr .
источник
Japt , 15 байт
Попытайся
объяснение
Неявный ввод целого числа
U
.[]
наша оболочка массива Для первого элемента@ }a
- это функция, которая работает непрерывно, пока не вернет истинное значение, каждый раз передавая себе возрастающее целое число (начиная с 0), и выводя окончательное значение этого целого числа.â
получает делители текущего целого числа (X
),x
суммирует их, и этот результат присваивается переменнойV
.<
проверяет, еслиU
меньшеV
. Второй элемент в массиве тогда простоV
.источник
Clojure , 127 байт
Попробуйте онлайн!
спасибо @steadybox за -4 байта!
источник
reduce
может быть заменено наapply
, также функцияe
может быть выражена как анонимная функция через#(...)
синтаксис, вам не нужно называть ее в Code Golf.#(=(rem n %)0)
короче чем#(zero?(rem n %))
. И помните, что,
это пробел, и в этом случае его можно удалить, так как за ним следует(
, так что он будет проанализирован правильно.Рубин , 58 байт
Полная программа, потому что я не уверен, разрешены ли лямбды. / пожимание плечами
Попробуйте онлайн!
объяснение
источник
JavaScript (ES6),
6158 байтИзменить: Сохранено 3 байта благодаря @Arnauld.
источник
05AB1E , 11 байт
Попробуйте онлайн!
Оставляет вывод в стеке, как разрешено в соответствии с мета-консенсусом . Я добавил
)
ради визуализации, но программа также неявно печатает верхнюю часть стека.источник
APL (Dyalog) , 32 байта
Попробуйте онлайн!
⍵o⍺⍵.
источник
SOGL V0.12 , 14 байт
Попробуй здесь!
Объяснение:
источник
C
7978 байтПопробуйте онлайн!
источник
i=s=!++n
вместо++n,i=s=0
MATL , 12 байт
Попробуйте онлайн!
объяснение
источник
Gaia , 11 байт
Попробуйте онлайн!
Оставляет вывод в стеке, как разрешено в соответствии с мета-консенсусом . Я добавил
€.
ради визуализации, но программа также неявно печатает верхнюю часть стека.источник
Haskell, 59 bytes
-1 byte, thanks to @nimi!
Try it online!
источник
Ohm v2, 11 bytes
Try it online!
источник
Factor, 88
Brute-force search. It's a quotation (lambda),
call
it withx
on the stack, leavesn
andf(n)
on the stack.As a word:
источник
Python 3, 163 bytes
источник
noob
in particular ;)Python 3, 100 bytes
Try it online!
Thanks to Jonathan Frech's comment on the previous python 3 attempt, I have just greatly expanded my knowledge of python syntax. I'd never have thought of the -~i for i+1 trick, which saves two characters.
However, that answer is 1) not minimal and 2) doesn't work for x=1 (due to an off-by-one error which is easy to make while going for brevity; I suggest everyone else check their answers for this edge case!).
Quick explanation:
sum(i+1for i in range(y)if y%-~i<1)
is equivalent tosum(i for i in range(1,y+1)if y%i<1)
but saves two characters. Thanks again to Mr. Frech.d=lambda y:sum(i+1for i in range(y)if y%-~i<1)
therefore returns the divisors of y.f=lambda x:min((j,d(j))for j in range(x+1)if x<=d(j))
is where I really did work. Since comparing a tuple works in dictionary order, we can compare j,d(j) as easily as we can compare j, and this lets us not have to find the minimal j, store it in a variable, and /then/ compute the tuple in a separate operation. Also, we have to have the <=, not <, inx<=d(j)
, because d(1) is 1 so if x is 1 you get nothing. This is also why we needrange(x+1)
and notrange(x)
.I'd previously had d return the tuple, but then I have to subscript it in f, so that takes three more characters.
источник
f=
as anonymous functions are perfectly acceptable here!f=
in your byte count, and is a good way to golf in Python. Check this for more golfing tips in Python!q=range
and replacingrange
withq
in both existing instances. Sadly, this doesn't improve it and since lambda is a keyword I can't use it for that, I'd have to do exec() tricks wasting too many characters.Python 2, 81 bytes
Try it online!
источник
Java (OpenJDK 8), 91 bytes
Try it online! (timeout on third test case)
источник
Perl 5, 60 + 1 (
-p
) = 61 bytesTry it online!
Output format:
sum-n
источник
Clojure, 102 bytes
источник
PHP, 69 bytes
источник
Perl 6, 48 bytes
Try it online!
источник