Giriş
Aşağıdaki gibi tanımlanan bir f tamsayı dizisini düşünün :
- f (2) = 2
- Eğer n, o zaman bir tek asal olduğu (n) r = (r (n-1) + f (n + 1)) / 2
- Eğer , n = p · q , sonra kompozit f (n) = f (s) · r (k)
Her n ≥ 2 için f (n) = n olduğunu görmek çok zor değil ve bu nedenle f'yi hesaplamak çok ilginç bir zorluk olmayacak. Tanım için bir bükülme yapalım: ilk vakayı yarıya ve ikinci vakayı ikiye katlayın. Aşağıdaki gibi tanımlanan yeni bir g dizisi elde ediyoruz :
- g (2) = 1
- Eğer n, o zaman bir tek asal olduğu , g (n) = g (n-1) + g (n + 1)
- Eğer , n = p · q , sonra kompozit , g (n) = gr (p)-g (q)
Görev
Göreviniz girdi olarak n ≥ 2 tamsayısını almak ve çıktı olarak g (n) üretmek . Tamsayı taşması konusunda endişelenmenize gerek yok, ancak g (1025) = 81 hesaplayabilmeniz gerekir doğru bir şekilde ve algoritmanız teorik olarak keyfi olarak büyük girdiler için çalışmalıdır.
Tam bir program veya işlev yazabilirsiniz. En düşük bayt sayısı kazanır.
Misal
Yukarıda g (1025) = 81 olduğunu iddia ettim , bu yüzden elle hesaplayalım. Asal çarpanlara 1025 verir
1025 = 5*5*41 => g(1025) = g(5)*g(5)*g(41)
Yana 41 asal, biz olsun
g(41) = g(40) + g(42)
Ardından, 40 ve 42'nin birincil çarpanlarına ayırma işlemlerini hesaplıyoruz :
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)
Bu küçük asallar için
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
Bunun anlamı şudur ki
g(41) = g(40) + g(42) = g(5) + g(3)*g(7) = 3 + 2*3 = 9
ve
g(1025) = g(5)*g(5)*g(41) = 3*3*9 = 81
Test senaryoları
İşte g'nin 50'ye kadar değerleri .
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)
ve a(2*n+1) = a(n) + a(n+1)
eğer 2*n+1
asal ise tutar . Diğer birçok tek sayı için diziler muhtemelen tesadüfle aynı fikirdedir.
15, 21, 25, 29, 33, 41
ve bir sürü daha, ama nedenine dair gerçek bir desen bulamıyorum.)