Amorces additives parmi les premiers x amorces


16

Définition des amorces additives:

  • Les nombres qui ont exactement 2 diviseurs sont appelés nombres premiers .

  • Les nombres premiers et leur somme de chiffres est également un nombre premier sont appelés nombres additifs


Tâche:

Étant donné un entier x, calculez tous les nombres premiers additifs parmi les xpremiers nombres premiers, en 2étant considéré à la fois comme le premier nombre premier et le nombre premier additif. Les nombres sont représentés en base 10.

Règles:

  • La sortie se compose de tous les nombres premiers additifs parmi les premiers xnombres premiers
  • 0 < x < 151, pour ce défi, à des fins de fonctionnalité
  • Étant donné que les nombres premiers additifs sont tous des entiers, les décimales ne sont pas autorisées (par exemple: vous devez sortir 2, non 2.0) et elles ne doivent pas être affichées sous forme de fraction.

Exemples:

10 -> 2 3 5 7 11 23 29

Explication:

Les 10 premiers nombres premiers sont 2 3 5 7 11 13 17 19 23 29, et 2 3 5 7 11 23 29n'ont que leur somme de nombres premiers, ceux-ci étant, respectivement 2,3,5,7,2,5,11, donc ce sont des nombres premiers additifs

Suite à l'explication de example 1, d'autres cas de test peuvent être:

2 -> 2 3

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

7 -> 2 3 5 7 11

Classement:


REMARQUE: veuillez lire la règle 1 nouvellement modifiée, elle apporte légèrement des modifications au format de sortie


Votre code doit être aussi court que possible, car il s'agit de , donc la réponse la plus courte en octets l'emporte. Bonne chance!


C'est très bien. Je recommanderais cependant d'attendre environ 24 heures, car chaque fois que vous acceptez la réponse, ils reçoivent 15 répétitions, mais ils la perdent lorsque vous refusez. Il est parfois quelque peu frustrant de monter sur les montagnes russes et de perdre et de gagner en permanence.
Rɪᴋᴇʀ

Réponses:


8

Pyke, 9 7 octets

~p>#Yss

Essayez-le en ligne!

Le seul octet a is_primeété poussé il y a seulement 3 heures.Github commit .

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

3
Vous venez de modifier votre langue pour répondre à ce défi? : D
Džuris

alors ... ssignifie is_prime sur les nombres et la somme sur les listes?
Conor O'Brien

@ ConorO'Brien oui, je le surcharge pour les listes et les entiers
Blue

@ Džuris non, je veux dire depuis un moment parce que je n'ai pas eu un seul nœud pour faire la vérification des nombres premiers, seulement factoriser en nombres premiers et diviseurs. Avant j'aurais dû faire ce _Pqui est 1 octet de plus dans ce cas
Blue

1
un nouveau candidat pour "la fonction linguistique la plus jeune pour gagner un défi"? sous le fil de ~ 2 heures?
Sparr

8

Python 2, 124 118 octets

Avec l'aide de 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

Vérifier la primalité en Python n'est pas amusant.


J'ai (lu: obtenu conor pour écrire du code J cool pour moi) ai testé cela avec 9n, ne fonctionne pas. : / n ** 2 fonctionne, mais à un coût de 1 octet.
Rɪᴋᴇʀ

Essayez n*npourn**2
Conor O'Brien

8

Röda , 136 135 octets

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}

Essayez-le en ligne!

C'est une fonction qui renvoie les nombres premiers additifs demandés.

Utilisation: main { f(25) | print ap for ap }Le code utilise la version 0.12, qui est en branche roda-0.12.

Non golfé:

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
Joli langage! Vous l'avez fait vous-même il y a longtemps, il ressemble? 10/10, a l'air plutôt cool.
Rɪᴋᴇʀ

Langage soigné! Comment exécutez-vous le programme?
Kritixi Lithos

Était sur le point de demander la même chose. Bien que j'aie regardé la documentation, je ne peux pas exécuter ou compiler la source du tout. Quelle est votre approche?
M. Xcoder

@KritixiLithos @ Xcoder123 Il nécessite Java 8 et Gradle. La version que j'utilise dans cette réponse est 0.12 (dans sa propre branche). Le référentiel doit être cloné récursivement. Pour créer un pot exécutable, invoquez gradle fatJar. Avez-vous des erreurs lors de la compilation?
fergusq

@fergusq Running gradle fatJarne semble pas créer de pot pour moi
Kritixi Lithos

5

Perl 6 , 53 octets

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

Essayez-le

Étendu:

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

Si ce défi était modifié pour que vous preniez les premiers x ultraprimes, cela pourrait être réduit à

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

5

Python 2 , 96 87 octets

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

Merci à @xnor d'avoir joué au golf sur 9 octets!

Essayez-le en ligne!


Il semble que l' utilisation d'une liste de variables indicatrices soit plus courte.
xnor

La somme des chiffres peut être plus courte telle quelle int(`k`,36)%35. Toutes les entrées seront suffisamment petites pour que cela suffise.
xnor


Hou la la! Je ne sais pas comment je pensais à un dict booléen mais pas à un tuple booléen (le recul est de 20/20), mais sum(p)et int(`k`,36)%35c'est autre chose ... Merci!
Dennis

5

Mathematica, 61 47 octets

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

Pas tout à fait familier avec les syntaxes sténographiques de Mathematica - qu'est-ce que c'est @*? Le *ne semble pas être au bon endroit pour être multiplié?
numbermaniac

3
@numbermaniac c'est la composition des fonctions. f@*gest essentiellement f@g@##&.
Martin Ender

4

Gelée , 10 octets

ÆNDS$€ĖÆPM

Essayez-le en ligne!

Comment?

Une approche légèrement différente ...

Æ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
Belle utilisation de Ė.
Dennis


3

Gelée , 11 octets

ÆN€DS$ÆP$Ðf

Essayez-le en ligne!

Explication:

ÆN € DS $ ÆP $ Ðf Lien principal (arguments: z)
ÆN € Génère les premiers z premiers.
   DS $ Prenez la somme numérique.
      ÆP Vérifiez s'il est premier.
        $ Rejoignez les deux derniers liens et créez une monade.
         Ðf Ne conserver que les éléments conformes au critère ci-dessus.

Je suis devenu golfeur.


2

MATL, 15 13 octets

2 octets économisés grâce à @Luis

:Yq"@V!UsZp?@

Essayez-le sur MATL Online

Explication

        % 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! Je savais qu'il y avait un moyen de raccourcir cette première partie. Merci
Suever


1

Ohm , 10 octets (CP437)

@▓_π;░_}Σp

Ce serait beaucoup plus court si j'avais une vectorisation ou un composant pour les premiers N premiers, mais hélas, je ne l'avais pas avant ce défi (mais je le fais maintenant !).

Explication:

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

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

Essayez-le en ligne!

Le contrôle principal dans PowerShell est nul.

La forboucle externe va de l'entrée $nvers le bas 0. Dans la boucle interne, nous utilisons un générateur premier sur $i, puis vérifier ifle chiffre somme ( -join'+'|iex) est aussi un nombre premier. Si c'est le cas, nous mettons $ile pipeline. Dans les deux cas, nous décrémentons $n--et la forboucle externe continue. Les $is résultants sont collectés à partir du pipeline et un implicite Write-Outputse produit à la fin du programme.



0

MATL , 13 octets

:YqtFYA!XsZp)

Essayez-le sur MATL Online!

Explication

:      % 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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.