Additive Primzahlen unter den ersten x Primzahlen


16

Definition von additiven Primzahlen:

  • Zahlen, die genau 2 Teiler haben, heißen Prime .

  • Zahlen, die Primzahlen sind und deren Ziffernsumme ebenfalls eine Primzahl ist, werden additive Primzahlen genannt


Aufgabe:

xBerechnen Sie bei einer Ganzzahl alle additiven Primzahlen unter den ersten xPrimzahlen mit2 wobei sowohl die erste Primzahl als auch die additive Primzahl berücksichtigt werden. Die Zahlen sind in Basis 10 dargestellt.

Regeln:

  • Die Ausgabe besteht aus allen additiven Primzahlen unter den ersten xPrimzahlen
  • 0 < x < 151, für diese Herausforderung, für Funktionszwecke
  • Da es sich bei den additiven Primzahlen um ganze Zahlen handelt, sind Dezimalzahlen nicht zulässig (z. B. sollten Sie ausgeben 2, nicht 2.0) und dürfen nicht als Bruch dargestellt werden.

Beispiele:

10 -> 2 3 5 7 11 23 29

Erläuterung:

Die ersten 10 Primzahlen sind 2 3 5 7 11 13 17 19 23 29und haben nur 2 3 5 7 11 23 29die Summe der Primzahlen 2,3,5,7,2,5,11, also additive Primzahlen

Nach der Erklärung von example 1können andere Testfälle sein:

2 -> 2 3

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

7 -> 2 3 5 7 11

Bestenliste:


HINWEIS: Bitte lesen Sie die neu bearbeitete Regel 1, da sie das Ausgabeformat geringfügig ändert


Ihr Code sollte so kurz wie möglich sein, da dies , damit die kürzeste Antwort in Bytes gewinnt. Viel Glück!


Das ist gut. Ich würde jedoch empfehlen, etwa 24 Stunden zu warten, da jedes Mal, wenn Sie die Antwort annehmen, 15 Wiederholungen auftreten, diese jedoch verloren gehen, wenn Sie die Antwort ablehnen. Es ist manchmal etwas frustrierend, mit der Achterbahn zu fahren und ständig Wiederholungen zu verlieren und zu gewinnen.
5.

Antworten:


8

Pyke, 9 7 Bytes

~p>#Yss

Probieren Sie es online!

Das einzelne Byte is_primewurde erst vor 3 Stunden verschoben. Github begehen .

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

3
Haben Sie gerade Ihre Sprache bearbeitet, um sich dieser Herausforderung anzupassen? : D
Džuris

sAlso ... bedeutet is_prime für Zahlen und Summe für Listen?
Conor O'Brien

@ ConorO'Brien ja, ich überladen es für Listen und ganze Zahlen
Blue

@ Džuris Nein, das habe ich schon seit einiger Zeit so gemeint, weil ich keinen einzigen Knoten für die Prüfung von Primzahlen hatte, sondern nur in Primzahlen und Divisoren zerlegte. Vorher hätte ich tun müssen, _Pwas in diesem Fall 1 Byte länger ist
Blue

1
ein neuer Anwärter auf "jüngste Sprache, um eine Herausforderung zu gewinnen"? unter dem Draht von ~ 2 Stunden?
Sparr

8

Python 2, 124 118 Bytes

Mit Hilfe von 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])

Original:

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

Das Überprüfen der Primalität in Python macht keinen Spaß.


Ich (lies: conor muss coolen J-Code für mich schreiben) habe dies mit 9n getestet, funktioniert nicht. : / n ** 2 funktioniert, kostet aber 1 Byte.
5.

Versuchen Sie n*nfürn**2
Conor O'Brien

8

Röda , 136 135 Bytes

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}

Probieren Sie es online!

Es ist eine Funktion, die die angeforderten additiven Primzahlen zurückgibt.

Verwendung: main { f(25) | print ap for ap }Der Code verwendet Version 0.12, die sich in einem Zweig befindetroda-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
Schöne Sprache! Du hast das vor langer Zeit selbst gemacht, wie es aussieht? 10/10, sieht ziemlich cool aus.
5.

Ordentliche Sprache! Wie läuft das Programm ab?
Kritixi Lithos

Wollte gerade dasselbe fragen. Obwohl ich die Dokumentation durchgesehen habe, kann ich die Quelle überhaupt nicht ausführen oder kompilieren. Was ist dein Ansatz?
Mr. Xcoder

@KritixiLithos @ Xcoder123 Erfordert Java 8 und Gradle. Die Version, die ich in dieser Antwort verwende, ist 0.12 (in einem eigenen Zweig). Das Repository muss rekursiv geklont werden. Um ein lauffähiges Gefäß herzustellen, rufen Sie auf gradle fatJar. Erhalten Sie Fehler beim Kompilieren?
Fergusq

@fergusq Laufen gradle fatJarscheint kein Glas für mich zu schaffen
Kritixi Lithos

5

Perl 6 , 53 Bytes

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

Versuch es

Erweitert:

{
  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
}

Wenn diese Herausforderung dahingehend geändert würde, dass Sie die ersten x Ultraprimes genommen hätten, könnte dies auf nur noch verkürzt werden

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

5

Python 2 , 96 87 Bytes

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

Vielen Dank an @xnor für das Golfen mit 9 Bytes!

Probieren Sie es online!



Die Ziffernsumme kann so wie sie ist kürzer gemacht werden int(`k`,36)%35. Alle Eingaben sind klein genug, damit dies ausreicht.
xnor


Beeindruckend! Ich bin nicht sicher, wie ich von einem Booleschen Diktat dachte, aber nicht von einem Booleschen Tupel (im Nachhinein 20/20), aber sum(p)und int(`k`,36)%35etwas anderes ... Danke!
Dennis

5

Mathematica, 61 47 Bytes

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

Nicht ganz vertraut mit Mathematics Kurzschreibweisen - was ist das @*? Der *sieht nicht so aus, als wäre er am richtigen Ort, um multipliziert zu werden?
Numbermaniac

3
@numbermaniac es ist Funktionszusammensetzung. f@*gist im Wesentlichen f@g@##&.
Martin Ender

4

Gelee , 10 Bytes

ÆNDS$€ĖÆPM

Probieren Sie es online!

Wie?

Ein etwas anderer Ansatz ...

Æ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
Gute Verwendung von Ė.
Dennis


3

Jelly , 11 Bytes

ÆN€DS$ÆP$Ðf

Probieren Sie es online!

Erläuterung:

ÆN € DS $ ÆP $ Ðf Hauptlink (Argumente: z)
ÆN € Erzeugt die ersten z Primzahlen.
   DS $ Nimm die digitale Summe.
      ÆP Überprüfen Sie, ob es Prime ist.
        $ Verbinde die letzten beiden Links und bilde eine Monade.
         Ðf Behalten Sie nur Elemente bei, die dem obigen Kriterium entsprechen.

Ich habe mich ärgern lassen.


2

MATL, 15 13 Bytes

2 Bytes gespart dank @Luis

:Yq"@V!UsZp?@

Probieren Sie es bei MATL Online aus

Erläuterung

        % 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! Ich wusste, dass es eine Möglichkeit gab, diesen ersten Teil zu verkürzen. Vielen Dank
Suever


1

Ohm , 10 Byte (CP437)

@▓_π;░_}Σp

Dies wäre viel kürzer, wenn ich eine Vektorisierung oder eine Komponente für die ersten N Primzahlen hätte, aber leider habe ich diese Herausforderung nicht vorgezogen (aber jetzt !).

Erläuterung:

@▓_π;░_}Σ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--}

Probieren Sie es online!

Erstprüfung in PowerShell ist zum Kotzen.

Die äußere forSchleife geht von der Eingabe nach $nunten 0. In der inneren Schleife verwenden wir einen erstklassigen Generator auf $i, dann überprüfen Sie ifdie Ziffernsumme ( -join'+'|iex) ist auch eine Primzahl. Wenn ja, setzen wir $idie Pipeline auf. In beiden Fällen dekrementieren wir $n--und die äußere forSchleife wird fortgesetzt. Die resultierenden $is werden aus der Pipeline gesammelt, und ein impliziter Write-OutputFehler tritt beim Abschluss des Programms auf.



0

MATL , 13 Bytes

:YqtFYA!XsZp)

Probieren Sie es bei MATL Online!

Erläuterung

:      % 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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.