La "formica primaria" è un animale ostinato che naviga gli interi e li divide fino a quando rimangono solo i numeri primi!
Inizialmente, abbiamo un array infinito A contenente tutti gli interi> = 2: [2,3,4,5,6,.. ]
Lascia che p
sia la posizione della formica sull'array. Inizialmente, p = 0
(l'array è indicizzato 0)
Ad ogni turno, la formica si sposterà come segue:
- se
A[p]
è primo, la formica si sposta nella posizione successiva:p ← p+1
- altrimenti, se
A[p]
è un numero composto,q
sia il suo divisore più piccolo> 1. DividiamoA[p]
perq
e aggiungiamoq
aA[p-1]
. La formica si sposta nella posizione precedente:p ← p-1
Ecco le prime mosse per la formica:
2 3 4 5 6 7 8 9 ...
^
2 3 4 5 6 7 8 9 ...
^
2 3 4 5 6 7 8 9 ...
^
2 5 2 5 6 7 8 9 ...
^
2 5 2 5 6 7 8 9 ...
^
2 5 2 5 6 7 8 9 ...
^
2 5 2 5 6 7 8 9 ...
^
2 5 2 7 3 7 8 9 ...
^
Il tuo programma dovrebbe produrre la posizione della formica dopo le n
mosse. (puoi presumere n <= 10000
)
Casi test:
0 => 0
10 => 6
47 => 9
4734 => 274
10000 => 512
Modificare. puoi anche utilizzare elenchi con 1 indice, è accettabile visualizzare i risultati 1, 7, 10, 275, 513 per il caso di test sopra riportato.
Questo è code-golf, quindi vince il codice con il codice più breve in byte.
n
(o se il caso composito potrebbe mai spingere la formica a sinistra dell'iniziale 2
).
1,7,10,275,513
se indicato 1-indexing? O avrebbero ancora bisogno di abbinare le tue uscite.