Penso che sia più semplice spiegare questa sfida in modo sequenziale. Inizia con un numero di input N e:
- Trova il suo fattore primo più alto
- Controllare i numeri sopra e sotto N e vedere se il più alto fattore primo è più alta (cioè il più alto fattore primo di N-1 e / o N + 1 è superiore al fattore di N .
- Continuare a controllare i numeri più alti e / o più bassi vicini N nelle direzioni in cui aumentano i fattori più alti ( (N-2, N-3 ...) e / o (N + 2, N + 3 ...) e così su)
- Una volta che non ci sono fattori primi in entrambe le direzioni più alti di quelli che abbiamo già trovato, ci fermiamo e produciamo il fattore primo più alto che abbiamo incontrato.
Diamo un'occhiata a un esempio:
245
ha i fattori primi 5, 7, 7
. I suoi vicini sono:
244 -> 2, 2, 61
245 -> 5, 7, 7
246 -> 2, 3, 41
Il fattore primo più alto sta aumentando in entrambe le direzioni, quindi dobbiamo guardare al prossimo vicino:
243 -> 3, 3, 3, 3, 3
244 -> 2, 2, 2, 61
245 -> 5, 7, 7
246 -> 2, 3, 41
247 -> 13, 19
I fattori primi più alti ora stanno diminuendo in entrambe le direzioni, quindi il fattore primo più alto che abbiamo riscontrato è 61
, e quindi dovrebbe essere restituito.
Un altro esempio:
Diamo un'occhiata 1024
. I suoi fattori primi sono 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
. I fattori primi dei vicini più vicini sono:
1023 -> 3, 11, 31
1024 -> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
1025 -> 5, 5, 41
Il fattore primo più elevato sta aumentando in entrambe le direzioni, da o 2
verso . Diamo un'occhiata ai vicini:31
41
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
Il fattore primo più alto per 1022
è 73
, e il fattore primo più alto per 1026
è 19
. Poiché 19
è inferiore a quello 41
che non ci interessa. Aumenta ancora per numeri inferiori a N, quindi controlleremo il prossimo in quella direzione :
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
è un numero primo e il numero più alto che abbiamo incontrato, quindi dovrebbe essere restituito.
Regole:
- Otterrai solo positivo
N
maggiore1
e minore di2^31-2
. - I formati di input e output sono opzionali, ma i numeri devono essere nella base 10.
- Dovresti continuare a cercare numeri primi più alti fintanto che il valore più alto aumenta in quella direzione. Le direzioni sono indipendenti l'una dall'altra.
Casi test:
Formato: N, highest_factor
2, 3
3, 3
6, 7
8, 11
24, 23
1000, 997
736709, 5417
8469038, 9431
N=2
in realtà sembra essere un caso limite dal momento che 1
non ha fattori primi, quindi nessun fattore primo massimo con cui possiamo confrontare per decidere se dovremmo continuare.
2
per N. Quindi prendiamo5
per N-1 e61
per N + 1. Quindi otteniamo19
per N-2 e67
per N + 2. Dovremmo continuare a provare numeri più bassi, da allora19>5
o fermarci, da allora5<61
? I massimi sono tenuti per lato? (Non sono sicuro che l'esempio sia matematicamente possibile.)