Primi additivi tra i primi x Primi


16

Definizione di Primi Additivi:

  • I numeri che hanno esattamente 2 divisori sono chiamati numeri primi .

  • I numeri che sono primi e la loro somma di cifre è anche un numero primo sono chiamati Primi Additivi


Compito:

Dato un numero intero x, calcola tutti i numeri primi additivi tra i xprimi numeri primi, tenendo 2conto sia del primo numero primo che dell'additivo. I numeri sono rappresentati nella base 10.

Regole:

  • L'output è costituito da tutti i numeri primi additivi tra i primi xprimi
  • 0 < x < 151, per questa sfida, ai fini della funzionalità
  • Poiché i numeri primi additivi sono tutti numeri interi, i decimali non sono consentiti (ad esempio: si dovrebbe produrre 2, non 2.0) e non devono essere visualizzati come una frazione.

Esempi:

10 -> 2 3 5 7 11 23 29

Spiegazione:

I primi 10 numeri primi sono 2 3 5 7 11 13 17 19 23 29e 2 3 5 7 11 23 29hanno solo la somma delle cifre numeri primi, rispettivamente quelli 2,3,5,7,2,5,11, quindi sono numeri primi additivi

A seguito della spiegazione example 1, altri casi di test possono essere:

2 -> 2 3

25 -> 2 3 5 7 11 23 29 41 43 47 61 67 83 89

7 -> 2 3 5 7 11

Classifica:


NOTA: si prega di leggere la regola 1 appena modificata, che porta leggermente modifiche al formato di output


Il codice dovrebbe essere il più breve possibile, poiché si tratta di , quindi vince la risposta più breve in byte. In bocca al lupo!


Va bene. Ti consiglierei di aspettare circa 24 ore, perché ogni volta che accetti la risposta ottengono 15 rappresentanti, ma la perdono quando non accetti. A volte è piuttosto frustrante guidare sulle montagne russe e perdere continuamente e guadagnare reputazione.
Rɪᴋᴇʀ

Risposte:


8

Pyke, 9 7 byte

~p>#Yss

Provalo online!

Il singolo byte è is_primestato inviato solo 3 ore fa. Github commette .

~p      -    All the prime numbers
  >     -   first input of them
   #Yss -  filter(^)
    Y   -     digits(^)
     s  -    sum(^)
      s -   is_prime(^)

3
Hai appena modificato la tua lingua per soddisfare questa sfida? : D
Džuris,

quindi ... ssignifica is_prime sui numeri e somma sugli elenchi?
Conor O'Brien,

@ ConorO'Brien sì, lo sovraccarico per liste e numeri interi
Blue

@ Džuris no, ho intenzione di farlo per un po 'perché non ho avuto un singolo nodo per fare il controllo primo, solo fattorizzando in numeri primi e divisori. Prima avrei dovuto fare _Pche è 1 byte più lungo in questo caso
Blue

1
un nuovo contendente per "funzionalità linguistica più giovane per vincere una sfida"? sotto il filo di ~ 2 ore?
Sparr

8

Python 2, 124 118 byte

Con l'aiuto di Riker:

n,f,P=input(),filter,lambda n:all(n%i for i in range(2,n))
f(lambda x:P(sum(map(int,`x`)))&P(x),f(P,range(2,n*n))[:n])

Originale:

n,o,c,P=input(),0,2,lambda n:all(n%i for i in range(2,n))
while o<n:
 o+=P(c)
 if P(sum(map(int,`c`)))and P(c):print c
 c+=1

Controllare la primalità in Python non è divertente.


Io (leggi: ho ottenuto conor per scrivere codice J freddo per me) ho provato questo con 9n, non funziona. : / n ** 2 funziona, ma al costo di 1 byte.
Rɪᴋᴇʀ

Prova n*npern**2
Conor O'Brien,

8

Röda , 136 135 byte

f n{P=[2]S=[2]seq 3,863|{|i|{P|{P+=i;s=0;((""..i)/"")|parseInteger _|s+=_;S+=i if[s in P and not(i in S)]}if{|p|[i%p>0]}_}if[#P<n]}_;S}

Provalo online!

È una funzione che restituisce i numeri primi additivi richiesti.

Utilizzo: main { f(25) | print ap for ap }il codice utilizza la versione 0.12, che è in diramazione roda-0.12.

Ungolfed:

function f(n) {
    primes := [2]
    ultraprimes := [2]
    seq(3, 863) | for i do
        break if [ #primes = n ]
        if [ i%p != 0 ] for p in primes do
            primes += i
            sum := 0
            ((""..i)/"") | parseInteger _ | sum += digit for digit
            ultraprimes += i if [ sum in primes and not (i in ultraprimes) ]
        done
    done
    ultraprimes
}

1
Bella lingua! L'hai fatto tu stesso tanto tempo fa? 10/10, sembra piuttosto bello.
Rɪᴋᴇʀ

Linguaggio pulito! Come si esegue il programma?
Kritixi Lithos

Stavo per chiedere la stessa cosa. Sebbene abbia esaminato la documentazione, non riesco a eseguire o compilare la fonte. Qual è il tuo approccio?
Mr. Xcoder

@KritixiLithos @ Xcoder123 Richiede Java 8 e Gradle. La versione che uso in questa risposta è 0.12 (nel suo ramo). Il repository deve essere clonato in modo ricorsivo. Per creare un barattolo eseguibile, invoca gradle fatJar. Ricevi errori durante la compilazione?
Fergusq,

@fergusq Running gradle fatJarnon sembra creare un barattolo per me
Kritixi Lithos

5

Perl 6 , 53 byte

{grep *.comb.sum.is-prime,grep(*.is-prime,0..*)[^$_]}

Provalo

Allargato:

{
  grep
    *.comb.sum.is-prime, # find the ultra primes from:
    grep(
      *.is-prime,        # find the primes
      0..*               # from all integers
    )[ ^$_ ]             # grab only the first x primes
}

Se questa sfida fosse cambiata in modo che tu prendessi i primi x ultraprimi, questo potrebbe essere abbreviato in giusto

{grep({($_&.comb.sum).is-prime},0..*)[^$_]}

5

Python 2 , 96 87 byte

p=-input(),0;m=k=1
while sum(p):
 m*=k*k;k+=1;p+=m%k,
 if m%k*p[int(`k`,36)%35]:print k

Grazie a @xnor per giocare a golf con 9 byte!

Provalo online!


Sembra che l' utilizzo di un elenco di variabili indicatore sia più breve.
xnor

La somma delle cifre può essere ridotta così com'è int(`k`,36)%35. Tutti gli input saranno abbastanza piccoli da bastare.
xnor


Wow! Non sono sicuro di come pensassi a un dict booleano ma non a una tupla booleana (il senno di poi è 20/20), ma sum(p)e int(`k`,36)%35sono qualcos'altro ... Grazie!
Dennis,

5

Mathematica, 61 47 byte

Prime@Range@#~Select~PrimeQ@*Tr@*IntegerDigits&

Non del tutto familiare con le sintassi di stenografia di Mathematica - che cos'è @*? Il *non sembra come se fosse al posto giusto per essere la moltiplicazione?
numbermaniac

3
@numbermaniac è la composizione delle funzioni. f@*gè essenzialmente f@g@##&.
Martin Ender,

4

Gelatina , 10 byte

ÆNDS$€ĖÆPM

Provalo online!

Come?

Un approccio leggermente diverso ...

ÆNDS$€ĖÆPM - Main link: n (>0)           e.g. 10
ÆN         - nth prime number                 29
     €     - for each in range(1,nth prime)   [1,    2,    3,   ..., 27,    28,     29]
    $      - last two links as a monad
  D        -     decimal digit list          [[1],  [2],  [3],  ...,[2,7], [2,8],  [2,9]]
   S       -     sum                          [1,    2,    3,   ..., 9,     10,     11]
      Ė    - enumerate                       [[1,1],[2,2],[3,3],...,[9,27],[10,28],[11,29]]
       ÆP  - is prime? (vectorises)          [[0,0],[1,1],[1,1],...,[0,1], [0,0],  [1,1]]
         M - indices of maximal elements     [       2,    3,   ...,                29]

3
Buon uso di Ė.
Dennis


3

Gelatina , 11 byte

ÆN€DS$ÆP$Ðf

Provalo online!

Spiegazione:

ÆN € DS $ ÆP $ Ðf Link principale (args: z)
ÆN € Genera primi z primi.
   DS $ Prendi la somma digitale.
      ÆP Controlla se è primo.
        $ Unisci gli ultimi due link e crea una monade.
         Ðf Conservare solo gli elementi conformi al criterio sopra riportato.

Mi sono superato.


2

MATL, 15 13 byte

2 byte salvati grazie a @Luis

:Yq"@V!UsZp?@

Provalo su MATL Online

Spiegazione

        % Implicitly grab input as a number (N)
:       % Create an array [1...N]
Yq      % Get the k-th prime for each element k in that array
"       % For each element in this list
  @     % Get the current element
  V!U   % Break it into digits
  s     % Sum up the digits
  Zp    % Determine if this is a prime number
  ?@    % If it is, push the value to the stack
        % Implicit end of for loop and implicit display of the stack

@LuisMendo Ah! Sapevo che c'era un modo per abbreviare quella prima parte. Grazie
Suever


1

Ohm , 10 byte (CP437)

@▓_π;░_}Σp

Questo sarebbe molto più breve se avessi la vettorializzazione o un componente per i primi N numeri primi, ma purtroppo non l'ho fatto prima di questa sfida (ma lo faccio ora !).

Spiegazione:

@▓_π;░_}Σp    Main wire, arguments: a

@▓  ;         Map...over the range (1..n)
  _π            nth prime
     ░        Select from ToS where...
      _}Σ       The sum of all digits
         p      is prime

1

PowerShell , 120 byte

for($n=$args[0];$n){for(;'1'*++$i-notmatch($s='^(?!(..+)\1+$)..')){}if('1'*([char[]]"$i"-join'+'|iex)-match$s){$i};$n--}

Provalo online!

Il controllo principale in PowerShell fa schifo.

Il forloop esterno passa dall'input in $nbasso a 0. Nel ciclo interno, usiamo un generatore di numeri primi acceso $i, quindi controlliamo che ifdigit-sum ( -join'+'|iex) sia anche un numero primo. In tal caso, mettiamo $iin cantiere. In entrambi i casi, diminuiamo $n--e il forciclo esterno continua. I messaggi risultanti $ivengono raccolti dalla pipeline e si verifica un implicito Write-Outputal completamento del programma.



0

MATL , 13 byte

:YqtFYA!XsZp)

Provalo su MATL Online!

Spiegazione

:      % Range [1 2 ... n], where n is implicit input
Yq     % Array of first n prime numbers
t      % Duplicate
FYA    % Convert to decimal digits. Gives a matrix, where each original 
       % number corresponds to a row. Left-pads with zeros if needed
!Xs    % Sum of rows
Zp     % Is prime? (element-wise)
)      % Use as logical index into the array of the first n prime numbers
       % Implicitly display
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.