Sequenza aritmetica dei primi del Bibliotecario pazzo


18

Bene, il bibliotecario ti ha sorpreso a imbrogliare sul tuo lavoro usando il tuo algoritmo di smistamento , quindi ora sei punito. Ti è stato ordinato di creare un po 'di codice in modo che il bibliotecario possa impressionare l'oggetto del loro affetto non corrisposto, l'insegnante di matematica. Quindi quella cosa "altre funzioni come assegnate" mezzi ...

Tutti hanno familiarità con la sequenza numerica naturale nella base 10, chiamata N :

0, 1, 2, 3, 4, 5, 6, ...

Da ciò, possiamo generare la sequenza di numeri primi, chiamiamola P , in modo che ogni elemento in P abbia esattamente due divisori in N , vale a dire 1e se stesso. Questa sequenza è:

2, 3, 5, 7, 11, 13, ...

OK, abbastanza routine finora.

Il pensiero bibliotecario di una funzione nifty F (x, y) che richiede un numero xda N , con la condizione 0 <= x <= 9, e un numero yda N , e inserti xin yespansione decimale 's in ogni posizione (cioè, anteponendo, l'inserimento o aggiungendo xin y), quindi restituisce il set ordinato di nuovi numeri.
Ad esempio, si otterrebbe F (6, 127)

1267, 1276, 1627, 6127

È comunque un po 'noioso. Il bibliotecario vuole ravvivare un po 'di più le cose specificando invece una nuova funzione z -> {p : p in P and F(z,p) subset of P}, ordinata in ordine crescente.
Ad esempio, z (7) sarebbe

3, 19, 97, 433, 487, 541, ...

perché 37e 73sono entrambi primi, 719 179e 197sono tutti primi, ecc.

Nota che z (2) è vuoto, perché nessun numero primo che ha un 2allegato sarà mai primo. Allo stesso modo per {0,4,5,6,8}.

Il tuo compito è scrivere codice che genererà e produrrà i primi 100 numeri nella sequenza z (x) per una data x .

Ingresso

Un singolo intero x tale che 0 <= x <= 9. L'input può essere tramite argomento della funzione, STDIN o equivalente.

Produzione

Una sequenza dei primi 100 numeri, delimitata dalla tua scelta, su STDOUT o equivalente, in modo tale che la sequenza soddisfi z (x) come descritto sopra. Se z (x) è vuoto, come nel caso di {0,2,4,5,6,8}, le parole Empty Setdovrebbero invece essere emesse.

restrizioni

  • Questo è code-golf, poiché dovrai trascriverlo su una scheda indice in modo che il bibliotecario possa mostrare l'insegnante di matematica e i crampi alle mani facilmente.
  • Si applicano le restrizioni standard sulle scappatoie. Il bibliotecario non tollera gli imbroglioni.

Sequenze di riferimento

x = 1: A069246
x = 3: A215419
x = 7: A215420
x = 9: A215421

Correlati: trova il primo fragile più grande / Trova il primo più piccolo da una sottostringa / Trova il primo più grande che è ancora un primo dopo l'eliminazione delle cifre

Risposte:


5

Pyth, 49 byte

Come Python3 e altre risposte Pyth, il runtime per trovare 100 numeri è proibitivo. (la suite di test dà 10)

?}z"1379".f&!tPZ!|FmtPvjzc`Z]dhl`Z*TT3"Empty Set"

Provalo online


1
Il trailing "non è necessario, comunque un lavoro molto bello.
FryAmTheEggman,

Grazie per il promemoria. Poiché EOL non termina più una stringa, ho evitato stringhe non terminate, ma ovviamente EOF funziona ancora
Brian Tuck,

4

Python 3, 188 byte

x=input()
k=1
i=100
if x in"024568":i=print("Empty Set")
while i:k+=1;s=str(k);i-=all(sum(p%d<1for d in range(2,p))<4for p in[k*int(s[:j]+x+s[j:])for j in range(len(s)+1)])and not print(k)

Ho giocato male, ma per ora ecco qualcosa. Invece di controllare p in P and F(z,p) subset of P, controlliamo che p*fè un semiprime per ciascuno f in F(z,p). Combinalo con la divisione di prova per i test di primalità e otterrai un O(scary)algoritmo.


+1 perO(scary)
AdmBorkBork,

1
Bel trucco nel settare i su Nessuno.
lirtosiast

3

Perl, 124 byte

$p=prime_iterator;y/1379//or$i=+~print'Empty Set'}while($i<100){$_=&$p;is_prime"$`@F$'"or redo while//g;$i++

Richiede la seguente opzione della riga di comando:, -palMntheory=:allconteggiato come 16. Input prelevato da stdin.

Utilizza il modulo di @DanaJMath::Prime::Util per perl (caricato con il pragma ntheory). Ottienilo con:

cpan install Math::Prime::Util
cpan install Math::Prime::Util::GMP

is_primeè deterministico per tutti i valori inferiori a 2 64 , il che è sufficiente per i nostri scopi.


Esempio di utilizzo

$ echo 2|perl -palMntheory=:all oscary.pl
Empty Set

$ echo 7|perl -palMntheory=:all oscary.pl
3
19
97
433
487
541
691
757
853
1471
.
.
.
718705783
720574573
737773357
745157779
747215167
767717017
768743377
770294977
771778477
774577777

Runtime attesi

x = 1 : 1m 09.2s
x = 3 : 0m 04.2s
x = 7 : 2m 52.5s
x = 9 : 0m 11.5s


1

Pyth, 58

L}bPb|*"Empty Set"}Qj204568T.f&yZ.Amyi++<JjZTdQ>JdThl`Z100

Questa suite di test calcola solo i primi 10 numeri perché impiega troppo tempo a generare il resto. Brute forza sia la primalità che l'inserimento delle cifre. Dimostra prestazioni così scarse che non sono stato in grado di eseguirlo fino a 100, quindi per favore dimmi se ci sono problemi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.