Divinacci Dizisi


23

Divinacci ( OEIS )

Fibonacci dizisini uygulayın ancak kullanmak yerine:

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

kullanın:

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

Bir girdi için n, nth terim çıktısı için, programınızın sadece 1 girişi olmalıdır.


İlk 14 terim (0 dizinli, 1 dizinli; kullandığınız durumu):

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

Ait bölenler: Sen yapanlar için lider 0'a dahil edilip edilmeyeceğini seçebilirsiniz 0olan []bu meydan amacıyla.

Bu var düşük bayt sayımı kazanır ...


15
Tüm doğal sayılar 0'a bölünür , böylelikle bölen toplamı + ∞ olur .
Dennis,

9
@Dennis nihayet 1 + 2 + 3 + ... = -1/12 olduğunu düşünmeyen biri.
Leaky Nun

1
@Dennis 0'dan kurtularak bunu geçerli kılabiliriz: P. Veya isterseniz bir Mathematica cevabı gönderebilirsiniz Infinity.
Magic Octopus Urn

Jelly cevabı daha kısa olurdu. : P Sıralamayı değiştirebilir (cevabın muhtemelen de ince ayar yapması gerekir) veya açıklamasını değiştirebilirsiniz ( 0, 1, 1 temel değerleriyle başlayın ).
Dennis,

1
@carusocomputing Diziyi değiştirmezse, cevapları nasıl etkileyebilir?
Martin Ender

Yanıtlar:



8

Mathematica, 45 40 bayt

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

Mathematica adlı bölen ilgili işlevler Divisors, DivisorSumve DivisorSigmaherkes için tanımsız olduğunu n = 0 biz başlamak böylece, (haklı olarak) f(1) = f(2) = 1ve girişi desteği yoktur 0.

Adsız bir işlev kullanmak yerine işleç olarak tanımlamak iki bayt daha uzun görünüyor:

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

* ±Bir Mathematica destekli kodlamada 1 bayt olmadığı sürece 7 bayt daha uzun .
CalculatorFeline

@CalculatorFeline Bu. ( $CharacterEncodingWindows makinelerde varsayılan ayar: WindowsANSICP 1252'dir.)
Martin Ender

1
Bilmek güzel. .
CalculatorFeline




3

Matl, 16 15 bayt

Oliq:",yZ\s]+]&

Bu çözüm 0 tabanlı endeksleme kullanır.

MATL Online'da deneyin

açıklama

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

Jöle , 10 9 bayt

ð,ÆDẎSð¡1

Çevrimiçi deneyin!

-1 için Dennis'e teşekkürler .



@Dennis 0Kapalı mıydı?
Outgolfer Erik,

STDIN'den yineleme sayısını aldığınızda niladik bir zincir alırsınız ve 0 , niladik zincirlerin örtük argümanıdır.
Dennis,

@Dennis Yani ¡ve diğerleri sadece, her yerden bir tartışma çıkarmaya çalışacaklar Ɠmı? Bu beklenmedik bir durum ...
Outgolfer Erik

Açıkça belirtilmediği sürece, ¡et al. son komut satırı argümanını alın ve eğer yoksa, STDIN'den bir satır okur.
Dennis,





1

R, 81 bayt

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 indeksli ve dizinin başlangıcındaki 0'ı hariç tutar. Bu sıfır bana uygulamam konusunda çok sıkıntı verdi, çünkü yerleşik pek numbers::divisorsişe yaramadı .

Gerisi, fibonacci dizisini uygulayan standart özyinelemeli fonksiyonun değiştirilmiş bir versiyonudur.

> f(1)
[1] 1
> f(2)
[1] 1
> f(3)
[1] 2
> f(5)
[1] 10
> f(13)
[1] 12846
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.