OEISによると、次のようになります。
G(1) = 1
G(n+1) = 1 + G(n + 1 - G(G(n)))
しばらくシーケンスを生成すると、繰り返しk
回数が繰り返されるグループのサイズが。であることがわかりk * G(k)
ます。たとえば、2回繰り返すグループのサイズはどれくらいですか?2 * G(2) = 4: 2 2 3 3
。3回繰り返すもの?3 * G(3) = 6: 4 4 4 5 5 5
(6
繰り返し4
ます)。
合計ig(k) = sum i * G(i), i <= k
は、1、2、...、k
回を繰り返すグループのサイズを示していることに注意してください。したがって、時間を繰り返すグループがどこでk
終了するかがわかります。
このOEIS式も役立ちます。
for G(1) + G(2)+ ... + G(n-1) < k <= G(1) + G(2) + ... + G(n) = sg(n)
we have G(k) = n
これを使用すると、のいくつかの値を計算するだけで、G
多数の値を見つけることができます。たとえば、次を見つけましょうG(10^6)
:
まず、k
そのようなものを見つけますk*G[k] < 10^6 <= (k + 1)*G[k + 1]
。G[10^6]
これは、グループが参加していること、したがってその価値を示すのに役立ちます。
これを見つけることは、それがサイズのグループにあるk
ことを意味します。G(10^6)
k + 1
私はこのC++プログラムを使用して、この値を見つけました。
int g[200000], ig[200000];
int main()
{
g[1] = 1;
ig[1] = 1;
for (int i = 2; i < 1000; ++i) {
g[i] = 1 + g[i - g[g[i - 1]]];
ig[i] = ig[i - 1] + i * g[i];
}
int k = 1;
while (ig[k] < 1000000) // 10^6
{
++k;
}
cout << k - 1 << ' ' << ig[k - 1] << endl;
cout << k << ' ' << ig[k] << endl;
return 0;
}
これは次のようになります。
k k * G[k] k + 1 (k + 1) * G[k + 1]
263 998827 264 1008859
次に、を使用して正確なグループを特定する必要があります。隣接する値間の補間を使用して、OEIS式でsg
を見つけます。n
ig
この意味は:
G(10^6) = sg(k = 263) + (ig(k + 1 = 264) - ig(k = 263)) / (k + 1 = 264)
答えを得るための正確な解決策と計算する必要のある値の数は演習として残されています。途中で問題がないか尋ねてください。