0

次のように指定されたシーケンスの最初の 3000 項目を計算する必要があります。

a_1=1、a_n+1 = 最小整数 > a_n、1<= i,j,k <= n+1 ごとに (必ずしも異なるわけではない) 適用される (a_i+a_j は 3*a_k と等しくない)

私は (Magma で) 正しく動作するコードを書きましたが、その時間の複雑さは明らかに大きすぎます。時間の複雑さを軽減する方法があるかどうかを尋ねています。すべての合計の配列を作成する方法で、何らかの方法で内側の for ループ (大混乱を引き起こしているループ) を移動するというアイデアがありましたが、正しく機能させることはできません。以下に私のコードを添付してください:

S:=[1];
for n:=2 to 3000 do
    new:=S[n-1];
    repeat
        flag:=0;
        new+:=1;
        for i,j in S do
            if (i+j eq 3*new) or (i+new eq 3*j) then
                flag:=1;
                break i;
            end if;
        end for;
    until flag eq 0;
    S[n]:=new;
end for;
print S[2015];

PS: 参考になれば、Python、Pascal、C などの言語も知っています。

4

1 に答える 1