OEIS A000009 считает количество строгих разделов целых чисел. Строгое разбиение неотрицательного целого числа n
является множество натуральных чисел (так что не повторение не допускается, и порядок не имеет значения) , что сумма к n
.
Например, 5 имеет три раздела: строгие 5
, 4,1
и 3,2
.
10 имеет десять разделов:
10
9,1
8,2
7,3
6,4
7,2,1
6,3,1
5,4,1
5,3,2
4,3,2,1
Вызов
Если задано неотрицательное целое число n
<1000, выведите количество строгих разделов.
Тестовые случаи:
0 -> 1
42 -> 1426
Вот список строгих номеров разделов от 0 до 55 от OEIS:
[1,1,1,2,2,3,4,5,6,8,10,12,15,18,22,27,32,38,46,54,64,76,89,104,122,142,165,192,222,256,296,340,390,448,512,585,668,760,864,982,1113,1260,1426,1610,1816,2048,2304,2590,2910,3264,3658,4097,4582,5120,5718,6378]
Это код-гольф , поэтому выигрывает самое короткое решение в байтах.
источник
subsequences
(+import
) в своем ответе, но пока не получилось.ES6, 64 байта
Работы по рекурсивному пробному вычитанию.
k
это число, которое вычиталось последним, и следующее число, которое должно быть вычтено, должно быть больше (но не настолько большим, чтобы нельзя было вычесть еще большее число). 1 добавлен, потому что вы всегда можете вычестьn
себя. (Также, поскольку это рекурсивно, я должен позаботиться о том, чтобы все мои переменные были локальными.)источник
Python, 68 байт
Просто вызовите анонимную функцию, передающую неотрицательное целое число в
n
качестве аргумента ... и дождитесь конца юниверса.источник
n>0
, вы сэкономите байт и пойдете быстрее (я полагаю, что вы набираете рекурсивные числа): Preturn sum(...)if n else 1
Python 2, 49 байт
Рекурсия разветвляется на каждое потенциальное слагаемое
k
от1
до,n
чтобы решить, следует ли его включать. Каждое включенное слагаемое вычитается из требуемой суммыn
, и в конце, еслиn=0
остается, этот путь подсчитывается.источник
Haskell, 43 байта
Бинарная функция
n%k
подсчитывает количество строгих разбиенийn
на части с максимальной частьюk
, поэтому желаемой функцией являетсяf n=n%n
. Каждое значениеk
может быть включена, которая уменьшаетсяn
сk
, или исключены, и в любом случае новый максимумk
один ниже, давая рекурсиюn%k=n%(k-1)+(n-k)%(k-1)
.источник
n%k|q<-k-1=n%q+(n-k)%q
бреет байт от линии 3.Юлия, 53 байта
Это анонимная функция, которая принимает целое число и возвращает целое число. Чтобы вызвать его, присвойте его переменной.
Мы получаем целые разделы , используя
partitions
,filter
только те , с различными слагаемыми,collect
в массив, и найти последний индекс (т.е. длину) с использованиемendof
.источник
Haskell, 58 байт
Пример использования:
map h [0..10]
->[1,1,1,2,2,3,4,5,6,8,10]
.Это простой метод грубой силы. Проверьте суммы всех подпоследовательностей
1..x
. Этоx == 0
тоже работает, потому что все подпоследовательности[1..0]
являются[[]]
и сумма[]
является0
.источник
05AB1E , 8 байтов
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
05AB1E , 5 байтов
Попробуйте онлайн!
Примечание: это очень медленно и будет превышено время ожидания для входов больше 20.
Объяснение:
источник