Plus Primes vs Minus Primes

35

Sebagian besar dari kita tahu ...

bahwa semua bilangan prima p>3adalah dari bentuk masukkan deskripsi gambar di sini

Tapi, berapa Primes Plus ( 6n+1) dan berapa Prius Minus ( 6n-1) dalam kisaran tertentu?

Tantangan

Mengingat integer k>5, menghitung berapa banyak primes<=kyang PlusPrimes dan berapa banyak yang MinusPrimes .

Contohnya

untuk k=100kami memiliki
[5, 11, 17, 23, 29, 41, 47, 53, 59, 71, 83, 89] 12 MinusPrimes
dan
[7, 13, 19, 31, 37, 43, 61, 67, 73, 79, 97] 11 PlusPrimes

karena k=149kami memiliki
[5, 11, 17, 23, 29, 41, 47, 53, 59, 71, 83, 89, 101, 107, 113, 131, 137, 149]
18 MinusPrimes
dan
[7, 13, 19, 31, 37, 43, 61, 67, 73, 79, 97, 103, 109, 127, 139]
15 PlusPrimes

Aturan

Kode Anda harus menampilkan 2 bilangan bulat : satu untuk MinusPrimes dan satu untuk PlusPrimes dalam urutan apa pun yang Anda suka (sebutkan yang mana).
Ini adalah : jawaban terpendek dalam byte menang!

Uji Kasus

Input -> Output [ MinusPrimes , PlusPrimes ]

6->[1,0]  
7->[1,1]   
86->[11,10]  
986->[86,78]  
5252->[351,344]  
100000->[4806,4784]   
4000000->[141696, 141448]

sumber
45
Saya tidak tahu! :(
Stewie Griffin
13
@StewieGriffin, mudah untuk intuisi jika Anda melihat urutan modulus: 0%6adalah kelipatan 6, 1%6tidak dapat ditentukan, 2%6kelipatan 2, 3%6kelipatan 3, 4%6kelipatan 2, dan 5%6tidak dapat ditentukan.
zzzzBov
3
@zzzzBov itu akan sangat membantu jika saya tahu mengapa modulus memiliki urutan, dan apa artinya untuk bilangan prima ... Saya berharap sekolah menengah mengajarkan teori bilangan ...
Socratic Phoenix
@ SocratesPhoenix, modulus berarti "sisa setelah pembagian". 0, 6, 12, dll semua menghasilkan 0 setelah pembagian dengan 6; 1, 7, 13 semuanya menghasilkan 1. Karena kita mencari angka yang tidak dapat dibagi menjadi faktor, mengetahui bahwa angka dapat dibagi oleh bilangan bulat lebih besar dari 1 memberitahu kita bahwa angka itu bukan prima.
zzzzBov

Jawaban:

10

05AB1E , 10 9 byte

Disimpan 1 byte berkat Erik the Outgolfer

Output sebagai [PlusPrimes, MinusPrimes]

LDpÏ6%5Ñ¢

Cobalah online! atau sebagai Test Suite

Penjelasan

L             # push range [1 ... input]
 DpÏ          # keep only primes
    6%        # mod each by 6
      5Ñ      # divisors of 5 [1, 5]
        ¢     # count
Emigna
sumber
6

MATL , 10 byte

Zq6\!5lh=s

Cobalah online! Atau verifikasi semua kasus uji .

Penjelasan

Zq     % Implicitly input k. Push row vector of primes up to k
6\     % Modulo 6, element-wise
!      % Transpose into a column vector
5lh    % Push row vector [5, 1]
=      % Is equal?, element-wise with broadcast
s      % Sum of each column. Implicitly display
Luis Mendo
sumber
6

Python 2 , 77 byte

-2 byte terima kasih kepada Neil

lambda x:[sum(all(n%j for j in range(2,n))for n in range(i,x,6))for i in 7,5]

Cobalah online!

Solusi sebelumnya, 83 81 79 byte

-1 byte terima kasih kepada Tn. Xcoder
-2 byte terima kasih kepada Halvard Hummel

lambda x:map([all(n%i for i in range(2,n))*n%6for n in range(4,x)].count,[5,1])

Cobalah online!
Keduanya keluaran sebagai [MinusPrimes, PlusPrimes]

tongkat
sumber
83
Mr. Xcoder
81 byte
Halvard Hummel
80?
Neil
Saya telah melakukan terlalu banyak pemahaman array JavaScript - Saya lupa bahwa daftar Python sering tidak perlu [].
Neil
Jadi, Anda membagi n dengan semua angka dari i ke n-1 untuk melihat apakah bilangan prima, lalu hasilkan semua bilangan bulat (5,11, ...) dan (7,13, ...) dan uji apakah nomor yang dipermasalahkan ada di sana, dan menghitungnya. Tampak efisien. ;)
Yakk
5

Jelly , 7 byte

s6ÆPSm4

Plus, lalu minus.

Cobalah online!

Bagaimana itu bekerja

s6ÆPSm4  Main link. Argument: n

s6       Split [1, ..., n] into chunks of length 6.
  ÆP     Test all integers for primality.
    S    Sum across columns.
         This counts the primes of the form 6k + c for c = 1, ..., 6.
     m4  Take every 4th element, leaving the counts for 6k + 1 and 6k + 5.
Dennis
sumber
5

Mathematica, 51 byte

(s=#;Mod[Prime~Array~PrimePi@s,6]~Count~#&/@{5,1})&

Cobalah online!

@ngenisis memutarnya, menghemat 4 byte

Mathematica, 47 byte

sPrime~Array~PrimePi@s~Mod~6~Count~#&/@{5,1}
J42161217
sumber
Modbisa juga infix, dan jika Anda akan menyebutkan argumen pertama s, cukup gunakan argumen bernama:sPrime~Array~PrimePi@s~Mod~6~Count~#&/@{5,1}
ngenisis
5

Japt , 15 13 11 byte

Urutan output adalah [+,-].

õj ò6 yx ë4

Menguji

  • Mengambil beberapa inspirasi dari solusi Dennis 'Jelly tetapi, setelah bermain golf, lebih dekat untuk menjadi pelabuhan.
  • 2 byte disimpan, terima kasih kepada Oliver yang membawa ëmetode array yang sebelumnya tidak diketahui untuk saya perhatikan.

Penjelasan

Input bilangan bulat implisit U.

õj

Hasilkan array bilangan bulat ( õ) dari 1 hingga Udan periksa apakah masing-masing bilangan prima ( j), berikan array boolean.

ò6

Partisi array menjadi sub-array dengan panjang 6.

yx

Transpose ( y) dan jumlah kolomnya.

ë4

Dapatkan setiap elemen ke-4 array dan secara implisit mengeluarkannya.


Asli, 19 17 16 15 byte

õ fj
5â £è_%6¥X

Menguji

  • 1 byte berkat saran yang diilhami dari Oliver untuk menggunakan pembagi 5 setelah saya beristirahat berpuas 15 untuk array.
Shaggy
sumber
3

J , 23 byte

1#.5 1=/6|_1 p:@i.@p:>:

Cobalah online!

1#.5 1=/6|_1 p:@i.@p:>:   input: y
          _1       p:     number of primes
                     >:   less than y + 1
             p:@i.        prime range from 0 to that number
        6|                get residues modulo 6
   5 1=/                  table of values equal to 5 or 1
1#.                       sum of each (antibase 1)
Conor O'Brien
sumber
3

Retina , 53 51 byte

.+
$*
1
$`1¶
G`1111
A`^(11+)\1+$
1{6}

*M`111
\b1\b

Cobalah online! Penjelasan:

.+
$*

Konversikan ke unary.

1
$`1¶

Hitung mulai dari 1 hingga n.

G`1111

Hapus angka kurang dari 4.

A`^(11+)\1+$

Hapus angka komposit.

1{6}

Ambil modulo 6 sisanya.

*M`111

Cetak jumlah angka dengan sisa antara 3 dan 5.

\b1\b

Cetak jumlah angka dengan sisa 1.

Neil
sumber
3

Ruby, 61 60 byte

(52 byte + 8 untuk -rprimesbendera)

->n{[1,5].map{|x|(4..n).count{|i|i.prime?&&i%6==x}}}

Mengembalikan array bentuk [plus bilangan prima, bilangan minus bilangan prima].

Disimpan 1 byte berkat GB!

Cobalah online.

Cristian Lupascu
sumber
Saya terinspirasi oleh jawaban Anda dan pembaruan saya (di Haskell)!
jferard
@ jferard Saya sangat senang mendengarnya! :)
Cristian Lupascu
Anda dapat menggunakan countrentang tanpa operator percikan (simpan 1 byte).
GB
3

Perl 6 , 42 byte

Disimpan 1 byte dengan menghapus ruang yang tidak berguna ...

Disimpan 2 byte dengan mengatur ulang map panggilan - terima kasih kepada @Joshua.

Disimpan 3 byte karena .round sama dengan .round: 1 .

Sebenarnya eksponensial kompleks itu keren tapi sangat mahal. Disimpan 10 byte hanya dengan membuangnya ...

{[+] map {.is-prime*($_%6-1??i!!1)},5..$_}

Cobalah online!

Ini adalah versi dengan eksponensial kompleks. (Saya suka terlalu banyak untuk menghapusnya.) Versi baru berfungsi persis dengan cara yang sama, hanya eksponensial kompleks yang digantikan oleh operator ternary yang jauh lebih pendek.

{[+] map {.is-prime*exp(π*($_%6-1)i/8).round},5..$_}

Cobalah online!

Outputnya adalah bilangan kompleks (PlusPrimes) + (MinusPrimes)i. Saya harap itu tidak terlalu melanggar aturan.


Penjelasan: Ini adalah fungsi yang membutuhkan satu argumen integer. Kami beralih dari semua bilangan bulat dari 5 ke argumen ( (5..$_)). Untuk masing-masing, kami mengevaluasi .is-prime(ini dipanggil $_, argumen dari blok yang dipetakan), melipatgandakannya (jika dinomori, True == 1, False == 0) dengan eksponensial kompleks yang dibuat menjadi exp(0) = 1(untuk $_%6 = 1) atau exp(iπ/2) = i(untuk $_%6 = 5), dan akhirnya membulatkannya ke bilangan bulat terdekat. Menjumlahkan mereka dengan [+]memberikan hasilnya.

Akhirnya: ini sangat efisien, jadi saya tidak yakin apakah TIO tidak akan kehabisan waktu sebelum Anda mendapatkan output untuk angka yang lebih tinggi (untuk 1e5, dibutuhkan 26 detik pada mesin saya, dan TIO cenderung agak lambat).

Ramillies
sumber
tidak apa-apa. kerja bagus!
Saya pikir Anda maksud di efisien? Metode yang bagus!
Jonathan Allan
Itu adalah upaya kasar untuk ironi :—).
Ramillies
Saat bermain golf, menggunakan metode bentuk mapatau grepkadang-kadang dapat dikenakan biaya beberapa karakter. Ini menghemat 2 karakter:{[+] map {.is-prime*exp(π*($_%6-1)i/8).round: 1},5..$_}
Yosua
Lupa melakukan itu di sini, terima kasih telah memperhatikannya!
Ramillies
2

Sebenarnya , 21 byte

u5x`p░⌠6@%1=;`╖*ƒ⌡Ml╜

Cobalah online!

Menghasilkan PlusPrimes terlebih dahulu, diikuti oleh MinusPrimes

Penjelasan:

u5x`p░⌠6@%1=;`╖*ƒ⌡Ml╜
u5x                    range(5, n+1)
   `p░                 primes in range
      ⌠6@%1=;`╖*ƒ⌡M    for each prime:
       6@%               mod 6
          1=             equal to 1
            ;`╖*ƒ        execute ╖ if p%6==1 (add 1 to register 0, consuming p)
                   l   length of resulting list (MinusPrimes)
                    ╜  push value in register 0 (PlusPrimes)
Mego
sumber
2

Ditumpuk , 37 byte

[~>$primeYES 6%5 1,$=table tr$summap]

Cobalah online!

Agak lambat, tes untuk primality untuk setiap K < N . Bekerja mirip dengan jawaban J saya.

Conor O'Brien
sumber
2

MATLAB 2017a, 29 Bytes

sum(mod(primes(k),6)'==[5,1])

Penjelasan: primes(k)dapatkan semua bilangan prima hingga dan termasuk k. mod(primes(k),6)'mengambil modulus 6 dari semua bilangan prima dan memindahkannya sehingga jumlah berjalan sepanjang dimensi yang benar. ==[5,1]set semua balita (minusPrimes) ke 1 di kolom pertama dan semua yang (plusPrimes) menjadi 1 di kolom kedua. sum()jumlah setiap kolom.

Ini output [minusPrime, plusPrime]

Poelie
sumber
2

Japt , 18 16 byte

-2 byte terima kasih kepada @Oliver

õ_j ©Z%6
5â £è¥X

Cobalah online!

Output dalam format [PlusPrimes, MinusPrimes].

Justin Mariner
sumber
Hmm ... Saya baru saja kembali ke meja saya, menambang milik saya hingga 17 byte dan kemudian melihat Anda memposting ini ... tidak tahu apakah saya harus mempostingnya atau tidak karena inti dari kedua solusi kami adalah pemetaan atas [5,1]untuk mendapatkan penghitungan dan Anda sampai di sana terlebih dahulu.
Shaggy
@Shaggy IMO solusi Anda memiliki cukup banyak perbedaan untuk tetap menjadi pos terpisah. Anda menggunakan filter dan string; Saya menggunakan fungsi pemetaan õdan array. Selain itu, saya mendapat [5,1]ide dari jawaban lain.
Justin Mariner
Saya akan memikirkannya sedikit; solusi dalam bahasa yang berbeda menggunakan metode yang sama (bahkan jika satu "meminjam" dari yang lain) tidak apa-apa tapi 2 solusi dalam bahasa yang sama melakukannya tidak sepenuhnya cocok dengan saya. Saya telah mengedit posting saya sebagai alternatif untuk saat ini.
Shaggy
Saya memutuskan untuk menjalankannya dan kemudian mencukur byte lain.
Shaggy
Anda dapat menggunakan untuk mendapatkan[1,5]
Oliver
2

C #, 202 179 174 Bytes

-23 Bytes terima kasih kepada Tn. Xcoder

-5 Bytes berkat Cyoce

Fungsi yang mengembalikan array dengan panjang 2, [MinusPrimes, PlusPrimes] Jalankan dengan memanggil a(n).

int[]a(int n){int[]r={0,0};for(int i=5;i<=n;i++)if(i%2*b(i)>0)if(i%6<5)r[1]++;else++r[0];return r;}int b(int n){for(int i=3;i-2<Math.Sqrt(n);i+=2)if(n%i<1)return 0;return 1;}

Kode yang diformat dengan benar di Try It Online: Sini

MysticVagabond
sumber
Bisakah Anda menambahkan tautan tio?
Tn. Xcoder
Maaf untuk bermain golf byte-ke-byte, 194 byte:public int[]a(int n){int[]r=new int[2];for(int i=5;i<=n;i++)if(i%2*b(i)>0)if(i%6<5)r[1]++;else++r[0];return r;}public int b(int n){for(int i=3;i<=Math.Sqrt(n)+1;i+=2)if(n%i<1)return 0;return 1;}
Mr. Xcoder
193 byte:public int[]a(int n){int[]r=new int[2];for(int i=5;i<=n;i++)if(i%2*b(i)>0)if(i%6<5)r[1]++;else++r[0];return r;}public int b(int n){for(int i=3;i-2<Math.Sqrt(n);i+=2)if(n%i<1)return 0;return 1;}
Mr. Xcoder
lmao youre mencintai ini bukan kamu;)
MysticVagabond
1
terima kasih atas semua bantuannya, karena Anda telah memposting jawaban terpisah dan menyatakan ini adalah milik saya, saya hanya akan meninggalkan milik saya apa adanya dan mengambil pelajaran ke tantangan berikutnya: P
MysticVagabond
2

Haskell , 81 69 byte

f n=(\r->sum[1|i<-[2..n],all((>0).rem i)[2..i-1],rem i 6==r])<$>[5,1]

Cobalah online!

Solusi pertama adalah:

r!l=sum[1|i<-l,rem i 6==r]
f n|l<-[i|i<-[2..n],all((>0).rem i)[2..i-1]]=(5!l,1!l)

Tapi saya membaca jawaban w0lf di Ruby ...

jferard
sumber
1

Pyth , 15 byte

/K%R6fP_TSQ5/K1

Test Suite.

Pyth , 16 byte

m/%R6fP_TSQd,1 5

Test Suite.


Bagaimana?

Penjelasan # 1

/ K% R6fP_TSQ5 / K1 - Program lengkap.

     fP_TSQ - Saring bilangan prima dalam kisaran [1 ... masukan].
  % R6 - Mod 6 masing-masing.
 K - Tetapkan mereka ke variabel K.
/ 5 - Hitung kejadian 5 di K.
            / K1 - Hitung kejadian 1 dalam K.
                - Keluarkan hasilnya secara tersirat.

Penjelasan # 2

m /% R6fP_TSQd, 1 5 - Program lengkap.

     fP_TSQ - Saring bilangan prima dalam kisaran [1 ... masukan]
  % R6 - Mod 6 masing-masing.
            , 1 5 - Dorong daftar [1, 5]
m / d - Hitung berapa masing-masing.  
                 - Keluarkan hasilnya secara tersirat. 

Alternatif:

/ K% R6fP_TSQ5 / KhZ (16 byte)
K% R6fP_TSQ / K5 / K1 (16 byte)
m /% R6fP_TSQdj15T (16 byte)
m /% R6fP_TSQd [1 5 (16 byte)   
m /% R6fP_TSQdsM`15 (17 byte)
m /% R6.MP_ZSQd, 1 5 (17 byte)
m /% R6.MP_ZSQdj15T (17 byte)
m /% R6.MP_ZSQd [1 5 (17 byte)
Tuan Xcoder
sumber
2
Selamat atas 10k !!
Luis Mendo
@LuisMendo Terima kasih banyak :-)
Tn. Xcoder
1

Jelly ,  12 11  10 byte

Terima kasih kepada @cairdcoinheringaahing untuk beberapa kiat dalam obrolan. Terima kasih kepada @Dennis karena menyimpan satu byte dalam obrolan.

ÆR%6ċЀ1,5

Cobalah online!

Jelly , 11 byte

ÆR%6µ1,5=þS

Cobalah online!

Jelly , 11 byte

ÆR%6µċ5,ċ1$

Cobalah online!


Bagaimana cara kerjanya?

Penjelasan # 1

ÆR%6ċЀ1,5   As usual, full program.

ÆR           Get all the primes in the range [2...input].
  %6         Modulo each by 6.
       1,5   The two-element list [1, 5].
    ċЀ      Count the occurrences of each of ^ in the prime range.

Penjelasan # 2

ÆR%6µ1,5=þS   As usual, full program.

ÆR            Get all the primes in the range [2...input].
  %6          Modulo each by 6.
    µ         Chain separator.
     1,5      The two-element list [1, 5].
        =     Equals?   
         þ    Outer product.     
          S   Sum.

Penjelasan # 3

ÆR%6µċ5,ċ1$   As usual, full program.

ÆR            All the primes in the range [2...input].
  %6          Modulo each by 6.
    µ     $   Some helpers for the chains.
       ,      Two element list.
     ċ5       The number of 5s.
        ċ1    The number of 1s.
Tuan Xcoder
sumber
1

Java 8, 141 140 138 106 101 100 96 94 81 byte

n->{int r[]={0,0},c;for(;n-->4;r[n%6/4]+=c)for(c=n;c>1;c=c-1&~n%c>>-1);return r;}

Mengembalikan integer-array dengan dua nilai, dalam urutan terbalik dibandingkan dengan deskripsi tantangan:
[plusPrime, minusPrime].

Port jawaban @Xynos C # , setelah saya bermain golf 39 40 42 byte.
Bantuan besar dari @Nay untuk -55 byte kekalahan lainnya

Penjelasan:

Coba di sini. (Kasus uji akhir 4000000melebihi batas waktu 60 detik sedikit.)

n->{                   // Method with integer parameter and integer-array return-type
  int r[]={0,0},       //  Return integer-array, starting at [0,0]
      c;               //  Temp integer
  for(;n-->4;          //  Loop (1) as long as the input is larger than 4
                       //  and decrease `n` by 1 before every iteration
      r[n%6/4]+=c)     //    After every iteration, increase the plus or minus prime by `c`
                       //    (where `c` is either 0 or 1)
    for(c=n;           //   Reset `c` to `n`
        c>1;           //   And inner loop (2) as long as `c` is larger than 1
      c=               //    Change `c` to:
        c-1&~n%c>>-1;  //     inverting the bits of `n`,                    [~n]
                       //     modulo-`c` that result,                       [%c]
                       //     then bit-shift right that by -1,              [>>-1]
                       //     and then bitwise-AND that result with `c-1`   [c-1&]
    );                 //   End of inner loop (2)
                       //  End of loop (1) (implicit / single-line body)
  return r;            //  Return result integer-array
}                      // End of method
Kevin Cruijssen
sumber
1
106 byte:n->{int r[]={0,0},i=4,j,c;for(;i++<n;){for(j=c=1;j*j<i;)c=i%(j+=2)<1?0:c;if(i%2*c>0)r[i%6%5]++;}return r;}
Nevay
1
101 byte:n->{int r[]={0,0},i=4,j,c;for(;i++<n;r[i%6%5%2]-=-i%2*c>>-1)for(j=c=1;j*j<i;)c|=i%(j+=2)-1;return r;}
Nevay
1
96 byte: n->{int r[]={0,0},i=4,j,c;for(;i++<n;r[i%6%5%2]+=i&c)for(j=c=1;j*j++<i;)c&=-i%++j>>-1;return r;}(-1 terima kasih untuk Anda j++,++j)
Nevay
1
94 byte: n->{int r[]={0,0},i=4,j,c;for(;i++<n;r[i%6/4]+=i&c)for(j=c=1;j*j++<i;)c&=-i%++j>>-1;return r;}( [plusPrime, minusPrime]).
Nevay
1
81 byte:n->{int r[]={0,0},c;for(;n-->4;r[n%6/4]+=c)for(c=n;c>1;)c=c-1&~n%c>>-1;return r;}
Nevay
1

JavaScript (ES6), 83 82 80 68 66 byte

Ternyata solusi yang sepenuhnya rekursif jauh lebih pendek daripada memetakan array!

Urutan output adalah [-,+]. Craps dengan kesalahan overflow di sekitar 3490.

f=(n,a=[0,0])=>n>4?f(n-1,a,(g=y=>n%--y?g(y):y<2)(n)&&++a[n%6%5]):a

Cobalah

o.innerText=(

f=(n,a=[0,0])=>n>4?f(n-1,a,(g=y=>n%--y?g(y):y<2)(n)&&++a[n%6%5]):a

)(i.value=6);oninput=_=>o.innerText=i.value>5?f(+i.value):[0,0]
<input id=i min=6 type=number><pre id=o>

Shaggy
sumber
0

CJam , 19 byte

ri){mp},6f%_5e=p1e=

Program yang mengambil input dari STDIN, dan menampilkan dua angka yang dipisahkan oleh baris baru melalui STDOUT.

Cobalah online!

Penjelasan

ri){mp},6f%_5e=p1e=

ri                        Read integer k
  )                       Add 1
       ,                  Filter the (implicit) array [0 1 ... k] ...
   {mp}                   ... on the function "is prime"
         f                Map over the resulting array...
          %               ... the function "modulus" ...
        6                 ... with extra parameter 6
           _              Duplicate the resulting array
             e=           Count occurrences ...
            5             ... of number 5
               p          Print with newline
                 e=       Count occurrences ...
                1         ... of number 1. Implicitly display
Luis Mendo
sumber
0

Angka R + , 66 60 58 40 byte

-16 bytes terima kasih kepada Jarko Dubbeldam! Saya kemudian bermain golf dua byte lagi.

cat(table(numbers::Primes(4,scan())%%6))

Mencetak PlusPrimes MinusPrimeske stdout; dibaca dari stdin.

tablementabulasikan jumlah setiap kemunculan nilai dalam vektor inputnya, dalam urutan nilai yang menaik. Oleh karena itu, karena hanya ada dua nilai, yaitu 1dan 5(mod 6), inilah fungsi yang kita butuhkan, bersama dengan numbers::Primes, yang mengembalikan semua bilangan prima di antara 4dan input.

Cobalah online!

Basis R , 97 91 89 86 65 byte

sekelompok byte yang disimpan oleh Jarko di sini juga

function(n)table((5:n)[sapply(5:n,function(x)all(x%%2:x^.5))]%%6)

Ini hampir identik dengan yang di atas, kecuali ia menghitung semua bilangan prima dalam basis R daripada menggunakan paket, dan kembali dengan fungsi output daripada mencetaknya. Anda dapat melihat dalam output bahwa ia mengembalikan tabel dengan nama 1dan 5, dengan jumlah di bawah ini.

Cobalah online!

Giuseppe
sumber
47 byte
JAD
(Dennis menambahkan nomor ke TIO, jadi itu bekerja sekarang :))
JAD
42 byte
JAD
all(x%%2:x^.5>0), apa pun yang bukan nol sudah benar, jadi all(x%%2:x^.5)berfungsi juga
JAD
@JarkoDubbeldam sangat bagus! Ternyata karena semua nilainya lebih besar daripada yang 4bisa kita singkirkan >4karena kita tidak akan memiliki 2di sana lagi sebagai bilangan prima, jadi golf ini menjadi 40 byte sebagai gantinya.
Giuseppe
0

JavaScript (SpiderMonkey) , 151 , 140 , 131 byte

n=>[...Array(n+1).keys()].splice(5).filter(a=>!/^1?$|^(11+?)\1+$/.test("1".repeat(a))).reduce((r,a)=>(a%6<2?r[1]++:r[0]++,r),[0,0])

Cobalah online!

Terima kasih kepada shaggy karena membantu memperbaiki bug dan bermain golf.

Penjelasan:

n=>                                                   // Create a lambda, taking n
    [...Array(n+1).keys()]                            // Create a list from 0 to n+1
        .splice(5)                                    // remove first five elements
        .filter(a=>                                   // filter the list to get primes
             !/^1?$|^(11+?)\1+$/.test("1".repeat(a))) // using the famous regex here: https://stackoverflow.com/questions/2795065/how-to-determine-if-a-number-is-a-prime-with-regex 
        .reduce((r,a)=>                               // reduce the list
           (a%6<2?r[1]++:r[0]++,r),                   // by counting plus primes
           [0,0])                                     // and minus primes
Pureferret
sumber
1
Retturns 17,15untuk 149 (Harus 18,15). Anda perlu menambah ukuran array Anda dengan 1: TIO . Kebetulan, ini hanya "vanilla" ES6, tidak ada yang spesifik untuk SpiderMonkey di dalamnya. Anda juga dapat menggunakan Stack Snippets untuk JS, daripada TIO. Dan, Anda memiliki banyak ruang yang dapat Anda hapus.
Shaggy
1
Satu lagi penghematan cepat untuk Anda, untuk menurunkan Anda hingga 131 byte .
Shaggy
@ Shaggy Saya tidak menyadari Anda bisa menggunakan pengurangan seperti itu.
Pureferret