Divinacciシーケンス


23

ディビナッチ(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とは思わない人。
リーキー修道女

1
@Dennis 0を取り除き、これを有効にすることができます:P。または、必要にInfinity応じてMathematicaの回答を送信することもできます。
魔法のタコUr

ゼリーの答えは短くなります。:Pシーケンスを変更するか(答えもおそらく微調整する必要があります)、またはその説明を変更できます(ベース値0、1、1から開始)。
デニス

1
@carusocomputingシーケンスを変更しない場合、回答にどのように影響しますか?
マーティンエンダー

回答:


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

大量のスワッピングが行われています。面白い。
魔法のタコUr

2
私は最後の数バイトが読者に強く叫んでいるのが好きです。
ローハン

1
あなたはこれを2分で勝ちました笑。
魔法のタコUr

8

Mathematica、45 40バイト

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

Mathematicaの除数に関連する関数DivisorsDivisorSumおよびnDivisorSigmaはすべてn = 0に対して未定義であるため(当然)、f(1) = f(2) = 1input から開始し、inputをサポートしません0

名前のない関数を使用する代わりに演算子として定義すると、2バイト長くなります。

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

* ±Mathematicaがサポートするエンコーディングで1バイトでない限り、7バイト長くなります。
電卓

@CalculatorFelineです。($CharacterEncodingWindowsマシンのデフォルト設定はWindowsANSI、CP 1252です。)
マーティンエンダー

1
知っておくといい。。
電卓




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暗黙的でしたか?
エリックアウトゴルファー

STDINから反復回数を取得すると、ニラディックチェーンが得られます。0は、ニラディックチェーンの暗黙的な引数です。
デニス

@Dennisだから¡他の人はどこからでも議論をしようとするƓでしょう。それはまったく予想外のことです...
エリックアウトゴルファー

明示的に指定されない限り、¡他 最後のコマンドライン引数を取り、もしなければ、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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.