前書き
次のように定義された整数fのシーケンスを考えます。
- f(2)= 2
- もしnは奇素数である、そして、 =(N)F(+ F(N-1)F(N + 1))/ 2
- もしN = P・Qは、その後、複合体であるF(N)= F(P)・F(Q)
n≥2ごとにf(n)= nであることを確認するのはそれほど難しくありません。したがって、fの計算はそれほど興味深い課題ではありません。定義をひねりましょう。最初のケースを半分にし、2番目のケースを2倍にします。次のように定義された新しいシーケンスgを取得します。
- g(2)= 1
- 場合nは奇素数である場合、G(N)= G(N-1)+ G(N + 1)
- もしN = P・Qが複合され、次いでG(N)= G(P)・G(Q)
タスク
あなたのタスクは、入力としてn≥2の整数を取り、出力としてg(n)を生成することです。整数オーバーフローを心配する必要はありませんが、計算できるはずです g(1025)= 81正しく、アルゴリズムは任意の大きな入力に対して理論的に機能するはずです。
完全なプログラムまたは関数を作成できます。最も低いバイトカウントが優先されます。
例
上記でg(1025)= 81と主張したので、手で計算してみましょう。素因数分解1025が提供します
1025 = 5*5*41 => g(1025) = g(5)*g(5)*g(41)
41は素数なので、
g(41) = g(40) + g(42)
次に、40と42の素因数分解を計算します。
40 = 2*2*2*5 => g(40) = g(2)*g(2)*g(2)*g(5) = g(5)
42 = 2*3*7 => g(42) = g(2)*g(3)*g(7) = g(3)*g(7)
これらの小さな素数については、
g(3) = g(2) + g(4) = 1 + 1 = 2
g(5) = g(4) + g(6) = 1 + 2 = 3
g(7) = g(6) + g(8) = 2 + 1 = 3
この意味は
g(41) = g(40) + g(42) = g(5) + g(3)*g(7) = 3 + 2*3 = 9
そして
g(1025) = g(5)*g(5)*g(41) = 3*3*9 = 81
テストケース
gの値は最大50です。
2 -> 1
3 -> 2
4 -> 1
5 -> 3
6 -> 2
7 -> 3
8 -> 1
9 -> 4
10 -> 3
11 -> 5
12 -> 2
13 -> 5
14 -> 3
15 -> 6
16 -> 1
17 -> 5
18 -> 4
19 -> 7
20 -> 3
21 -> 6
22 -> 5
23 -> 7
24 -> 2
25 -> 9
26 -> 5
27 -> 8
28 -> 3
29 -> 9
30 -> 6
31 -> 7
32 -> 1
33 -> 10
34 -> 5
35 -> 9
36 -> 4
37 -> 11
38 -> 7
39 -> 10
40 -> 3
41 -> 9
42 -> 6
43 -> 11
44 -> 5
45 -> 12
46 -> 7
47 -> 9
48 -> 2
49 -> 9
50 -> 9
a(2*n) = a(n)
、a(2*n+1) = a(n) + a(n+1)
if 2*n+1
が素数である場合に成り立ちます。他の多くの奇数では、シーケンスはおそらく偶然一致します。
15, 21, 25, 29, 33, 41
、とさらにたくさんのが、なぜに私は、実際のパターンを見つけることができません。)