Divinacci序列


23

Divinacci(OEIS

执行斐波那契数列,但不要使用:

f(n) = f(n-1)+f(n-2)

使用:

f(n) = sum(divisors(f(n-1))) + sum(divisors(f(n-2)))

对于输入n,输出第n个项,您的程序应该只有1个输入。


前14个字词(0索引,您可以1索引;使用的状态):

0  | 0     # Initial               | []
1  | 1     # Initial               | [1] => 1
2  | 1     # [] + [1]              | [1] => 1
3  | 2     # [1] + [1]             | [1,2] => 3
4  | 4     # [1] + [1,2]           | [1,2,4] => 7
5  | 10    # [1,2] + [1,2,4]       | [1,2,5,10] => 18
6  | 25    # [1,2,4] + [1,2,5,10]  | [1,5,25] => 31
7  | 49    # [1,2,5,10] + [1,5,25] | [1,7,49] => 57
8  | 88    # [1,5,25] + [1,7,49]   | [1, 2, 4, 8, 11, 22, 44, 88] => 180
9  | 237   # [1,7,49] + [180]      | [1, 3, 79, 237] => 320
10 | 500   # [180] + [320]         | [1, 2, 4, 5, 10, 20, 25, 50, 100, 125, 250, 500] => 1092
11 | 1412  # [320] + [1092]        | [1, 2, 4, 353, 706, 1412] => 2478
12 | 3570  # [1092] + [2478]       | [1, 2, 3, 5, 6, 7, 10, 14, 15, 17, 21, 30, 34, 35, 42, 51, 70, 85, 102, 105, 119, 170, 210, 238, 255, 357, 510, 595, 714, 1190, 1785, 3570] => 10368
13 | 12846 # [2478] + [10368]      | [1, 2, 3, 6, 2141, 4282, 6423, 12846] => 25704
Etc...

您可以选择是否要包括领先的0对于那些谁做的:的除数0[]对这一挑战的目的。

这是最低的字节数获胜...


15
所有自然数都除以0,因此其除数之和为+∞
丹尼斯,

9
@Dennis终于有人不认为1 + 2 + 3 + ... = -1/12。
Leaky Nun

1
@Dennis我们可以摆脱0并通过:P使它有效。或者,您可以根据需要提交Mathematica答案Infinity
Magic Octopus Urn

果冻的答案会更短。:P您可以更改顺序(答案也可能需要调整)或更改其描述(从基本值0、1、1开始)。
丹尼斯,

1
@carusocomputing如果不改变顺序,它将如何影响答案?
Martin Ender

Answers:


10

05AB1E,9个字节

XÎFDŠ‚ÑOO

在线尝试!

说明

XÎ          # initialize stack with 1,0,input
  F         # input times do
   D        # duplicate
    Š       # move down 2 places on the stack
     ‚      # pair the top 2 elements on the stack
      Ñ     # compute divisors of each
       OO   # sum twice

吨的交换继续吧!有趣。
Magic Octopus Urn

2
我喜欢最后几个字节如何对读者大吼大叫。
Rohan Jhunjhunwala

1
您在2分钟前赢得了大声笑。
魔术章鱼缸

8

Mathematica,45个 40字节

If[#<3,1,Tr@Divisors@#0[#-i]~Sum~{i,2}]&

Mathematica的除数相关函数DivisorsDivisorSum并且DivisorSigma对于n = 0都是未定义的(正确地如此),因此我们从这里开始f(1) = f(2) = 1并且不支持input 0

将其定义为运算符而不是使用未命名函数似乎要长两个字节:

±1=±2=1
±n_:=Sum[Tr@Divisors@±(n-i),{i,2}]

*除非±在Mathematica支持的编码中为1个字节,否则要长7个字节。
CalculatorFeline

@CalculatorFeline是。($CharacterEncoding在Windows计算机上WindowsANSI,默认设置为CP1252。)
Martin Ender

1
很高兴知道。。
CalculatorFeline




3

MATL,16 15字节

Oliq:",yZ\s]+]&

此解决方案使用基于0的索引。

MATL Online上尝试

说明

O        % Push the number literal 0 to the stack
l        % Push the number literal 1 to the stack
i        % Explicitly grab the input (n)
q        % Subtract 1
:        % Create the array [1...(n - 1)]
"        % For each element in this array...
  ,      % Do the following twice
    y    % Copy the stack element that is 1-deep
    Z\   % Compute the divisors
    s    % Sum the divisors
  ]      % End of do-twice loop
  +      % Add these two numbers together
]        % End of for loop
&        % Display the top stack element

3

果冻10 9字节

ð,ÆDẎSð¡1

在线尝试!

感谢丹尼斯 -1。



@Dennis 0是隐式的吗?
暴民埃里克(Erik the Outgolfer)'17年

当您从STDIN中获取迭代次数时,将获得一个尼拉迪链,而0是尼拉迪链的隐式参数。
丹尼斯,

因此¡,@ Dennis 和其他人将尝试从任何地方进行争论,即使有Ɠ?这真是太出乎意料了……
Outgolfer的Erik

除非明确说明,否则¡。接受最后一个命令行参数,如果没有,则从STDIN读取一行。
丹尼斯,





1

R,81个字节

f=function(n,a=1,b=1,d=numbers::divisors)`if`(n-1,f(n-1,b,sum(d(a))+sum(d(b))),a)

1索引,在序列开始处排除0。这个零给我带来了很多实现上的麻烦,因为内建numbers::divisors函数不能很好地处理它。

其余的是实现斐波那契序列的标准递归函数的修改版本。

> f(1)
[1] 1
> f(2)
[1] 1
> f(3)
[1] 2
> f(5)
[1] 10
> f(13)
[1] 12846
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.