Additive Primes di antara x Primes pertama


16

Definisi Bilangan Aditif:

  • Angka yang memiliki tepat 2 pembagi disebut Prime angka.

  • Bilangan yang prima dan jumlah digitnya juga merupakan bilangan prima yang disebut Additive Primes


Tugas:

Dengan bilangan bulat x, hitung semua bilangan prima aditif di antara bilangan prima pertama x, dengan 2dianggap sebagai bilangan prima pertama dan bilangan prima aditif. Angka-angka diwakili dalam basis 10.

Aturan:

  • Output terdiri dari semua bilangan prima aditif di antara xbilangan prima pertama
  • 0 < x < 151, untuk tantangan ini, untuk tujuan fungsionalitas
  • Karena bilangan prima aditif adalah semua bilangan bulat, desimal tidak diperbolehkan (misalnya: Anda harus menampilkan 2, bukan 2.0) dan bilangan tersebut tidak boleh ditampilkan sebagai fraksi.

Contoh:

10 -> 2 3 5 7 11 23 29

Penjelasan:

10 bilangan prima pertama adalah 2 3 5 7 11 13 17 19 23 29, dan hanya 2 3 5 7 11 23 29memiliki jumlah digit bilangan prianya, yaitu, masing-masing 2,3,5,7,2,5,11, sehingga bilangan prima aditif

Mengikuti penjelasan dari example 1, kasus uji lain mungkin:

2 -> 2 3

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

7 -> 2 3 5 7 11

Papan peringkat:


CATATAN: Harap baca aturan 1 yang baru diedit, ini membawa sedikit perubahan ke format output


Kode Anda harus sesingkat mungkin, karena ini adalah , jadi jawaban tersingkat dalam byte menang. Semoga berhasil!


Tidak apa-apa. Saya akan merekomendasikan menunggu sekitar 24 jam, karena setiap kali Anda menerima jawaban mereka mendapat 15 rep, tetapi mereka kehilangan itu ketika Anda tidak menerima. Kadang-kadang agak frustasi untuk naik rollercoaster dan terus menerus kehilangan dan mendapatkan perwakilan.
Rɪᴋᴇʀ

Jawaban:


8

Pyke, 9 7 byte

~p>#Yss

Cobalah online!

Byte tunggal is_primehanya didorong 3 jam yang lalu. Github melakukan .

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

3
Apakah Anda baru saja mengedit bahasa Anda agar sesuai dengan tantangan ini? : D
Džuris

jadi ... sberarti is_prime pada angka, dan jumlah pada daftar?
Conor O'Brien

@ ConorO'Brien ya, saya membebani daftar dan bilangan bulat
Blue

@ Dzuris tidak, saya telah bermaksud untuk sementara waktu karena saya belum memiliki satu node untuk melakukan pemeriksaan prima, hanya memfaktorkan ke dalam bilangan prima dan pembagi. Sebelumnya saya harus melakukan _Pyang 1 byte lebih lama dalam kasus ini
Blue

1
pesaing baru untuk "fitur bahasa termuda untuk memenangkan tantangan"? di bawah kawat ~ 2 jam?
Sparr

8

Python 2, 124 118 byte

Dengan bantuan dari 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])

Asli:

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

Memeriksa primality dengan Python tidak menyenangkan.


Saya (baca: mendapat conor untuk menulis kode J keren untuk saya) telah menguji ini dengan 9n, tidak berfungsi. : / n ** 2 berfungsi, tetapi dengan biaya 1 byte.
Rɪᴋᴇʀ

Coba n*nuntukn**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}

Cobalah online!

Ini adalah fungsi yang mengembalikan bilangan prima aditif yang diminta.

Penggunaan: main { f(25) | print ap for ap }Kode ini menggunakan versi 0.12, yang ada di cabang roda-0.12.

Tidak Terkumpul:

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
Bahasa yang bagus! Anda membuat ini sendiri sejak dulu? 10/10, terlihat sangat keren.
Rɪᴋᴇʀ

Bahasa yang rapi! Bagaimana Anda menjalankan program?
Kritixi Lithos

Baru saja akan menanyakan hal yang sama. Walaupun saya melihat dokumentasi, saya tidak bisa menjalankan atau mengkompilasi sumber sama sekali. Apa pendekatanmu?
Tn. Xcoder

@KritixiLithos @ Xcoder123 Ini membutuhkan Java 8 dan Gradle. Versi yang saya gunakan dalam jawaban ini adalah 0,12 (di cabang sendiri). Repositori harus dikloning secara rekursif. Untuk membuat stoples yang bisa dijalankan, aktifkan gradle fatJar. Apakah Anda mendapatkan kesalahan saat kompilasi?
fergusq

@fergusq Running gradle fatJarsepertinya tidak membuat botol untuk saya
Kritixi Lithos

5

Perl 6 , 53 byte

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

Cobalah

Diperluas:

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

Jika tantangan ini diubah sehingga Anda mengambil x ultraprimes pertama ini bisa disingkat menjadi adil

{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

Terima kasih kepada @xnor karena bermain golf dengan 9 byte!

Cobalah online!


Sepertinya menggunakan daftar variabel indikator lebih pendek.
xnor

Jumlah digit dapat dilakukan lebih pendek sebagaimana adanya int(`k`,36)%35. Semua input akan cukup kecil sehingga cukup.
xnor


Wow! Saya tidak yakin bagaimana saya memikirkan dict Boolean tetapi bukan tuple Boolean (belakang adalah 20/20), tapi sum(p)dan int(`k`,36)%35ada sesuatu yang lain ... Terima kasih!
Dennis

5

Mathematica, 61 47 byte

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

Tidak sepenuhnya terbiasa dengan sintaksis steno Mathatica - apa itu @*? Itu *tidak terlihat seperti itu di tempat yang tepat untuk menjadi perkalian?
numbermaniac

3
@numbermaniac itu komposisi fungsi. f@*gpada dasarnya f@g@##&.
Martin Ender

4

Jelly , 10 byte

ÆNDS$€ĖÆPM

Cobalah online!

Bagaimana?

Pendekatan yang sedikit berbeda ...

Æ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
Penggunaan yang bagus Ė.
Dennis


3

Jelly , 11 byte

ÆN€DS$ÆP$Ðf

Cobalah online!

Penjelasan:

ÆN € DS $ ÆP $ Ðf Link utama (args: z)
ÆN € Hasilkan z primes pertama.
   DS $ Ambil jumlah digital.
      ÆP Periksa apakah itu prima.
        $ Bergabunglah dengan dua tautan terakhir dan hasilkan monad.
         Keepf Hanya simpan elemen yang sesuai dengan kriteria di atas.

Saya dikalahkan.


2

MATL, 15 13 byte

2 byte disimpan berkat @Luis

:Yq"@V!UsZp?@

Cobalah di MATL Online

Penjelasan

        % 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! Saya tahu ada cara untuk mempersingkat bagian pertama itu. Terima kasih
Suever


1

Ohm , 10 byte (CP437)

@▓_π;░_}Σp

Ini akan jauh lebih pendek jika saya memiliki vektorisasi atau komponen untuk bilangan prima N pertama, tetapi sayangnya, saya tidak sebelum tantangan ini (tapi saya lakukan sekarang !).

Penjelasan:

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

Cobalah online!

Pemeriksaan perdana di PowerShell menyebalkan.

forLingkaran luar beralih dari input $nke bawah 0. Di loop dalam, kita menggunakan generator prima aktif $i, lalu periksa ifdigit-sum ( -join'+'|iex) juga prima. Jika demikian, kami memasang $ipipa. Dalam kedua kasus, kami mengurangi $n--dan forloop luar berlanjut. $iS yang dihasilkan dikumpulkan dari pipa dan implisit Write-Outputterjadi pada penyelesaian program.



0

MATL , 13 byte

:YqtFYA!XsZp)

Cobalah di MATL Online!

Penjelasan

:      % 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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.