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:
245ha 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 2verso . Diamo un'occhiata ai vicini:3141
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 41che 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
Nmaggiore1e 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=2in realtà sembra essere un caso limite dal momento che 1non ha fattori primi, quindi nessun fattore primo massimo con cui possiamo confrontare per decidere se dovremmo continuare.
2per N. Quindi prendiamo5per N-1 e61per N + 1. Quindi otteniamo19per N-2 e67per N + 2. Dovremmo continuare a provare numeri più bassi, da allora19>5o fermarci, da allora5<61? I massimi sono tenuti per lato? (Non sono sicuro che l'esempio sia matematicamente possibile.)