Divinacci-Sequenz

23

Divinacci ( OEIS )

Führe die Fibonacci-Sequenz durch, anstatt:

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

Verwenden:

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

Für eine Eingabe von n, geben Sie den n-ten Term aus, Ihr Programm sollte nur 1 Eingabe haben.


Die ersten 14 Begriffe (0-indiziert, Sie können 1-indizieren; geben Sie an, welche Sie verwendet haben):

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...

Sie können wählen, ob Sie die führende 0 einschließen möchten oder nicht. Für diejenigen, die dies tun: Die Teiler von 0sind []für den Zweck dieser Herausforderung.

Es ist niedrigsten Byte-Anzahl gewinnt ...

Magische Kraken-Urne
quelle
15
Alle natürlichen Zahlen teilen 0 , daher ist die Teilersumme + ∞ .
Dennis
9
@Dennis endlich jemand, der das nicht glaubt 1 + 2 + 3 + ... = -1/12.
Undichte Nonne
1
@Dennis Wir können die 0 loswerden und dies gültig machen, obwohl: P. Oder Sie können einfach eine Mathematica-Antwort von senden, Infinitywenn Sie möchten.
Magic Octopus Urn
Die Gelee-Antwort wäre kürzer. : P Sie können entweder die Reihenfolge ändern (wahrscheinlich müsste auch die Antwort angepasst werden) oder die Beschreibung ändern (beginnen Sie mit den Basiswerten 0, 1, 1 ).
Dennis
1
@carusocomputing Wenn sich die Reihenfolge nicht ändert, wie kann sich dies auf die Antworten auswirken?
Martin Ender

Antworten:

10

05AB1E , 9 Bytes

XÎFDŠ‚ÑOO

Probieren Sie es online!

Erläuterung

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
Emigna
quelle
Tonnenweise tauschen, heh! Interessant.
Magic Octopus Urn
2
Ich mag, wie die letzten paar Bytes den Leser mit Nachdruck anschreien.
Rohan Jhunjhunwala
1
Du hast das mit 2 Minuten Vorsprung gewonnen.
Magic Octopus Urn
8

Mathematica, 45-40 Bytes

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

Mathematicas Divisor bezogenen Funktionen Divisors, DivisorSumund DivisorSigmaalle sind nicht definiert für n = 0 (Recht), so dass wir aus starten f(1) = f(2) = 1und unterstützen keine Eingabe 0.

Die Definition als Operator anstelle einer unbenannten Funktion scheint zwei Byte länger zu sein:

±1=±2=1
±n_:=Sum[Tr@Divisors@±(n-i),{i,2}]
Martin Ender
quelle
* 7 Bytes länger, sofern nicht ±1 Byte in einer von Mathematica unterstützten Codierung enthalten ist.
CalculatorFeline
@ CalculatorFeline Es ist. (Die Standardeinstellung für $CharacterEncodingWindows-Computer ist WindowsANSICP 1252.)
Martin Ender,
1
Gut zu wissen. .
CalculatorFeline
3

MATL, 16 15 Bytes

Oliq:",yZ\s]+]&

Diese Lösung verwendet eine 0-basierte Indizierung.

Probieren Sie es bei MATL Online aus

Erläuterung

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
Suever
quelle
3

Gelee , 10 9 Bytes

ð,ÆDẎSð¡1

Probieren Sie es online!

Danke an Dennis für -1.

Erik der Outgolfer
quelle
9 Bytes
Dennis
@Dennis Das 0war implizit?
Erik der Outgolfer
Wenn Sie die Anzahl der Iterationen von STDIN nehmen, erhalten Sie eine Niladenkette, und 0 ist das implizite Argument von Niladenketten.
Dennis
@Dennis Also ¡und andere werden einfach versuchen, von überall einen Streit anzunehmen , auch mit einem Ɠ? Das ist ziemlich unerwartet ...
Erik der Outgolfer
Sofern nicht ausdrücklich angegeben, ¡et al. Nehmen Sie das letzte Befehlszeilenargument und lesen Sie, wenn es keine gibt, eine Zeile von STDIN.
Dennis
3

Python 3 , 88 83 81 Bytes

f=lambda n:+(n<3)or g(f(n-1))+g(f(n-2))
g=lambda n,i=1:n>=i and(n%i<1)*i+g(n,i+1)

Probieren Sie es online!

Schließt das aus 0

ovs
quelle
2

PHP , 97 Bytes

for($f=[0,$y=1];++$i<$argn;$x=$y,$y=$r)for($f[]=$r=$v=$n=$x+$y;--$v;)$n%$v?:$r+=$v;echo$f[$argn];

Probieren Sie es online!

PHP , 101 Bytes

for($f=$d=[0,1];$i<$argn;$d[]=$r)for($f[]=$r=$v=$n=$d[$i]+$d[++$i];--$v;)$n%$v?:$r+=$v;echo$f[$argn];

Probieren Sie es online!

Jörg Hülsermann
quelle
1

R, 81 Bytes

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-indiziert und schließt die 0 am Anfang der Sequenz aus. Diese Null bereitete mir große Schwierigkeiten bei der Implementierung, da das eingebaute numbers::divisorsSystem damit nicht gut zurechtkommt.

Der Rest ist eine modifizierte Version der rekursiven Standardfunktion, die die Fibonacci-Sequenz implementiert.

> f(1)
[1] 1
> f(2)
[1] 1
> f(3)
[1] 2
> f(5)
[1] 10
> f(13)
[1] 12846
JAD
quelle