Einführung
Betrachten Sie eine Folge von Ganzzahlen f, die wie folgt definiert sind:
- f (2) = 2
- Wenn n eine ungerade Primzahl ist, dann ist f (n) = (f (n-1) + f (n + 1)) / 2
- Wenn n = p · q zusammengesetzt ist, dann ist f (n) = f (p) · f (q)
Es ist nicht sehr schwer zu erkennen, dass f (n) = n für jedes n ≥ 2 ist , und daher wäre die Berechnung von f keine sehr interessante Herausforderung. Nehmen wir eine Änderung der Definition vor: Halbieren Sie den ersten Fall und verdoppeln Sie den zweiten Fall. Wir bekommen eine neue Sequenz g definiert wie folgt:
- g (2) = 1
- Wenn n eine ungerade Primzahl ist, dann ist g (n) = g (n-1) + g (n + 1)
- Wenn n = p · q zusammengesetzt ist, dann ist g (n) = g (p) · g (q)
Die Aufgabe
Ihre Aufgabe ist es, eine ganze Zahl n ≥ 2 als Eingabe zu nehmen und g (n) als Ausgabe zu erzeugen . Sie müssen sich keine Gedanken über einen Ganzzahlüberlauf machen, sollten jedoch in der Lage sein, g (1025) = 81 korrekt zu berechnen , und Ihr Algorithmus sollte theoretisch für beliebig große Eingaben funktionieren.
Sie können ein vollständiges Programm oder eine Funktion schreiben. Die niedrigste Byteanzahl gewinnt.
Beispiel
Ich habe oben behauptet, dass g (1025) = 81 , also lassen Sie es uns von Hand berechnen. Die Primfaktorisierung von 1025 ergibt
1025 = 5*5*41 => g(1025) = g(5)*g(5)*g(41)
Da 41 Prime ist, bekommen wir
g(41) = g(40) + g(42)
Als nächstes berechnen wir die Primfaktoren von 40 und 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)
Für diese kleinen Primzahlen bekommen wir
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
Das bedeutet, dass
g(41) = g(40) + g(42) = g(5) + g(3)*g(7) = 3 + 2*3 = 9
und
g(1025) = g(5)*g(5)*g(41) = 3*3*9 = 81
Testfälle
Hier sind die Werte von g bis zu 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)
, und a(2*n+1) = a(n) + a(n+1)
hält, wenn 2*n+1
ist prime. Für viele andere ungerade Zahlen stimmen die Folgen wahrscheinlich zufällig überein.
15, 21, 25, 29, 33, 41
und ein paar mehr, aber ich kann kein wirkliches Muster zu warum finden.)