Ich denke, es ist am einfachsten, diese Herausforderung nacheinander zu erklären. Beginnen Sie mit einer Eingabenummer N und:
- Finden Sie den höchsten Primfaktor
- Überprüfen Sie die Zahlen über und unter N und prüfen Sie, ob der höchste Primfaktor höher ist (dh der höchste Primfaktor von N-1 und / oder N + 1 ist höher als der Faktor von N) .
- Überprüfen Sie weiterhin höhere und / oder niedrigere Zahlen neben N in den Richtungen, in denen die höchsten Faktoren zunehmen ( (N-2, N-3 ...) und / oder (N + 2, N + 3 ...) und so weiter auf)
- Sobald es in keiner Richtung Primfaktoren gibt, die höher sind als die, die wir bereits gefunden haben, stoppen wir und geben den höchsten Primfaktor aus, auf den wir gestoßen sind.
Schauen wir uns ein Beispiel an:
245
hat die Primfaktoren 5, 7, 7
. Seine Nachbarn sind:
244 -> 2, 2, 61
245 -> 5, 7, 7
246 -> 2, 3, 41
Der höchste Primfaktor steigt in beide Richtungen, also müssen wir uns den nächsten Nachbarn ansehen:
243 -> 3, 3, 3, 3, 3
244 -> 2, 2, 2, 61
245 -> 5, 7, 7
246 -> 2, 3, 41
247 -> 13, 19
Die höchsten Primfaktoren nehmen nun in beide Richtungen ab, so dass der höchste Primfaktor, den wir angetroffen haben, ist 61
und daher zurückgegeben werden sollte.
Ein anderes Beispiel:
Schauen wir uns an 1024
. Seine Hauptfaktoren sind 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
. Die Hauptfaktoren seiner nächsten Nachbarn sind:
1023 -> 3, 11, 31
1024 -> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
1025 -> 5, 5, 41
Die höchsten Primfaktoren nehmen in beide Richtungen zu, von 2
bis 31
oder 41
. Schauen wir uns die Nachbarn an:
1022 -> 2, 7, 73
1023 -> 3, 11, 31
1024 -> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
1025 -> 5, 5, 41
1026 -> 2, 3, 3, 19
Der höchste Primfaktor für 1022
ist 73
und der höchste Primfaktor für 1026
ist 19
. Da 19
ist niedriger als 41
wir nicht daran interessiert sind. Bei Zahlen unter N nimmt die Zahl immer noch zu, daher überprüfen wir die nächste Zahl in dieser Richtung :
1021 -> 1021
1022 -> 2, 7, 73
1023 -> 3, 11, 31
1024 -> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
1025 -> 5, 5, 41
1026 -> 2, 3, 3, 19
1021
ist eine Primzahl und die höchste Primzahl, auf die wir gestoßen sind. Sie sollte daher zurückgegeben werden.
Regeln:
- Sie werden nur
N
größer1
und kleiner als positiv2^31-2
. - Eingabe- und Ausgabeformate sind optional, die Zahlen müssen sich jedoch in der Basis 10 befinden.
- Sie sollten weiter nach höheren Primzahlen suchen, solange der höchste Wert in diese Richtung steigt. Die Richtungen sind voneinander unabhängig.
Testfälle:
Format: N, highest_factor
2, 3
3, 3
6, 7
8, 11
24, 23
1000, 997
736709, 5417
8469038, 9431
2
für N. Wir bekommen dann5
für N-1 und61
für N + 1. Dann bekommen wir19
für N-2 und67
für N + 2. Sollten wir weiterhin versuchen, niedrigere Zahlen zu verwenden, seitdem19>5
oder aufhören, seitdem5<61
? Dh werden die Maxima pro Seite eingehalten? (Ich bin nicht sicher, ob das Beispiel mathematisch möglich ist.)N=2
scheint tatsächlich ein Randfall zu sein, da1
es keine Primfaktoren gibt, also keinen maximalen Primfaktor, mit dem wir vergleichen können, um zu entscheiden, ob wir fortfahren sollen.Antworten:
Mathematica,
8274 BytesVielen Dank an Martin Ender für das Speichern von 8 Bytes!
Unbenannte Funktion, die eine Ganzzahleingabe und eine Ganzzahl zurückgibt.
±n_:=#//.x_/;l[t=x+n]>l@x:>t
definiert eine unäre Funktion,±
die die Ganzzahleingabe der globalen Funktionn
so lange erhöht, wie der größte Primfaktor zunimmt. (Die Funktion mit dem größten Primfaktor wird mit definiertl=FactorInteger[#][[-1,1]]&
.) Diese Funktion wird{±-1,±1}
daher zweimal mit Inkrement-1
und erneut mit Inkrement auf die ganze Eingangszahl angewendet1
. Nimmt manMax@@(...l...)/@...
dann den größeren der beiden so gefundenen größten Primfaktoren.Vorherige Einreichung:
quelle
@@@
(und Sie könnenl@x
dort verwenden):Max@@(±n_:=#//.x_/;l[t=x+n]>l@x:>t;l=FactorInteger[#][[-1,1]]&)/@{±-1,±1}&
Perl, 137 Bytes
122 Byte Code + 15 Byte für
-p
und-Mntheory=:all
.Um es auszuführen:
Wenn Sie es noch nicht
ntheory
installiert haben, können Sie es installieren, indem Sie(echo y;echo) | perl -MCPAN -e 'install ntheory'
Ihr Terminal eingeben .quelle
Ruby, 99 Bytes
Erläuterung:
quelle