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!

Tuan Xcoder
sumber
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(^)
Biru
sumber
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.

Daniel
sumber
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
}
fergusq
sumber
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..*)[^$_]}
Brad Gilbert b2gills
sumber
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!

Dennis
sumber
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&
Martin Ender
sumber
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]
Jonathan Allan
sumber
3
Penggunaan yang bagus Ė.
Dennis
3

05AB1E , 9 byte

ÝبvySOp—

Menggunakan pengkodean CP-1252 . Cobalah online!

Adnan
sumber
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.

Erik the Outgolfer
sumber
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
Suever
sumber
@LuisMendo Ah! Saya tahu ada cara untuk mempersingkat bagian pertama itu. Terima kasih
Suever
1

Bash + coreutils, 97 byte

p()(factor $1|wc -w)
for((;++n,c<$1;)){((`p $n`-2||(c++,`p $[n%10+n/10%10+n/100]`-2)))||echo $n;}

Cobalah online!

Mitchell Spector
sumber
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
Nick Clifford
sumber
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.

AdmBorkBork
sumber
1

Paket Bash + GNU utilities + bsd-games, 69

primes 2|sed -rn 'h;s/./ + &/g;s/.*/expr &|factor/e;/\w\s/!{x;p};'$1q

Cobalah online .

digital Trauma
sumber
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
Luis Mendo
sumber