Séquence Divinacci


23

Divinacci ( OEIS )

Effectuez la séquence de Fibonacci mais au lieu d'utiliser:

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

Utilisation:

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

Pour une entrée de n, sortez le nième terme, votre programme ne devrait avoir qu'une seule entrée.


14 premiers termes (index 0, vous pouvez 1 index; indiquez celui que vous avez utilisé):

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

Vous pouvez choisir d'inclure ou non le 0 de tête. Pour ceux qui le font: les diviseurs de 0sont []dans le but de ce défi.

C'est le nombre de octets le plus bas du ...


15
Tous les nombres naturels divisent 0 , donc sa somme des diviseurs est + ∞ .
Dennis

9
@Dennis enfin quelqu'un qui ne pense pas que 1 + 2 + 3 + ... = -1/12.
Leaky Nun

1
@Dennis Nous pouvons nous débarrasser du 0 et le rendre valable cependant: P. Ou vous pouvez simplement soumettre une réponse Mathematica Infinitysi vous le souhaitez.
Magic Octopus Urn

La réponse Jelly serait plus courte. : P Vous pouvez soit changer la séquence (la réponse nécessiterait probablement aussi des ajustements), soit changer sa description (commencer par les valeurs de base 0, 1, 1 ).
Dennis

1
@carusocomputing Si cela ne change pas la séquence, comment peut-il affecter les réponses?
Martin Ender

Réponses:


10

05AB1E , 9 octets

XÎFDŠ‚ÑOO

Essayez-le en ligne!

Explication

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

Des tonnes d'échanges en cours heh! Intéressant.
Magic Octopus Urn

2
J'aime la façon dont les deux derniers octets crient avec force au lecteur.
Rohan Jhunjhunwala

1
Vous avez gagné cela par 2 minutes lol.
Magic Octopus Urn

8

Mathematica, 45 40 octets

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

Les fonctions liées au diviseur de Mathematica Divisors, DivisorSumet ne DivisorSigmasont pas toutes définies pour n = 0 (à juste titre), nous partons donc de f(1) = f(2) = 1et ne prenons pas en charge la saisie 0.

Le définir comme un opérateur au lieu d'utiliser une fonction sans nom semble être plus long de deux octets:

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

* 7 octets de plus, sauf si ±1 octet est utilisé dans un codage pris en charge par Mathematica.
CalculatorFeline

@CalculatorFeline C'est le cas. (Le paramètre par défaut pour $CharacterEncodingles machines Windows est WindowsANSI, c.-à-d. CP 1252.)
Martin Ender

1
Bon à savoir. .
CalculatorFeline




3

MATL, 16 15 octets

Oliq:",yZ\s]+]&

Cette solution utilise une indexation basée sur 0.

Essayez-le sur MATL Online

Explication

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

Gelée , 10 9 octets

ð,ÆDẎSð¡1

Essayez-le en ligne!

Merci à Dennis pour -1.



@Dennis Le 0était implicite?
Erik the Outgolfer

Lorsque vous prenez le nombre d'itérations de STDIN, vous obtenez une chaîne niladique, et 0 est l'argument implicite des chaînes niladiques.
Dennis

@Dennis Donc, ¡et d'autres vont juste essayer de prendre un argument de partout, même avec un Ɠ? C'est assez inattendu ...
Erik the Outgolfer

Sauf indication contraire explicite, ¡et al. prenez le dernier argument de ligne de commande et, s'il n'y en a pas, lit une ligne depuis STDIN.
Dennis





1

R, 81 octets

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 indexé et exclut le 0 au début de la séquence. Ce zéro m'a donné beaucoup de mal à implémenter, car le builtin ne le gère numbers::divisorspas bien.

Le reste est une version modifiée de la fonction récursive standard qui implémente la séquence fibonacci.

> f(1)
[1] 1
> f(2)
[1] 1
> f(3)
[1] 2
> f(5)
[1] 10
> f(13)
[1] 12846
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.