Esistono un numero piuttosto elevato di funzioni di generazione primaria. Praticamente tutti sono costruiti e si basano sul setaccio di Eratostene, sulla funzione di Möbius o sul teorema di Wilson e sono generalmente impossibili da calcolare in pratica. Ma ci sono anche generatori, che hanno una struttura molto semplice e sono stati trovati per caso.
Nel 2003 Stephen Wolfram ha esplorato una classe di equazioni di ricorrenza nidificate in un esperimento informatico dal vivo presso la NKS Summer School. Un gruppo di persone intorno a Matthew Frank ha seguito ulteriori esperimenti e ha scoperto un'interessante proprietà della semplice ricorrenza
a(n) = a(n-1) + gcd(n,a(n-1))
con il valore iniziale di a(1) = 7
. La differenza a(n) - a(n-1) = gcd(n,a(n-1))
sembrava sempre essere 1 o un numero primo. Le prime differenze sono ( OEIS A132199 ):
1, 1, 1, 5, 3, 1, 1, 1, 1, 11, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 3, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 3, 1, 5, 3, ...
Se omettiamo solo gli 1 otteniamo la seguente sequenza ( OEIS A137613 ):
5, 3, 11, 3, 23, 3, 47, 3, 5, 3, 101, 3, 7, 11, 3, 13, 233, 3, 467, 3, 5, 3,
941, 3, 7, 1889, 3, 3779, 3, 7559, 3, 13, 15131, 3, 53, 3, 7, 30323, 3, ...
Eric S. Rowland ha dimostrato il primato di ogni elemento in questa lista qualche anno dopo. Come puoi vedere, i numeri primi sono mescolati e alcuni di essi appaiono più volte. È stato anche dimostrato che la sequenza include infiniti numeri primi distinti. Inoltre è ipotizzato che compaiano tutti i numeri primi dispari.
Poiché questo generatore principale non è stato costruito ma è stato semplicemente trovato per caso, il generatore principale è chiamato "naturale". Ma nota che in pratica questo generatore è anche abbastanza impossibile da calcolare. A quanto pare, un primo p appare solo dopo (p–3)/2
1s consecutivi. Tuttavia implementare questo generatore principale sarà il tuo compito.
Sfida:
Scrivi una funzione o un programma che stampa i primi n
elementi della sequenza A137613
(la sequenza senza 1). È possibile leggere il numero di input n >= 0
tramite STDIN, argomento della riga di comando, prompt o argomento della funzione. Stampa i primi n
elementi in qualsiasi formato leggibile su STDOUT o restituisce un array o un elenco con questi valori.
Questo è code-golf. Pertanto vince il codice più breve.
Classifica:
Ecco uno snippet di stack per generare sia una classifica regolare che una panoramica dei vincitori per lingua. Per assicurarti che la tua risposta venga visualizzata, ti preghiamo di iniziare la risposta con un titolo, usando il seguente modello Markdown:
# Language Name, N bytes
dove N è la dimensione del tuo invio. Se si migliora il punteggio, è possibile mantenere i vecchi punteggi nel titolo, colpendoli. Per esempio:
# Ruby, <s>104</s> <s>101</s> 96 bytes
a(n)-a(n-1)
n
essere zero?
//
) e spiegalo nel tuo invio. Se qualcuno non è d'accordo con te, puoi sempre modificare il tuo post.