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.