Artı Asallar vs Eksi Asalları


35

Çoğumuz biliyoruz ...

tüm asalların p>3formda olduğu görüntü tanımını buraya girin

Ancak, Plus Primes ( 6n+1) kaç kişi ve Eksi Primes ( 6n-1) belirli bir aralıkta kaç tane ?

Meydan okuma

Bir tamsayı verildiğinde , PlusPrimesk>5 sayısı ve MinusPrimes sayısı sayılır .primes<=k

Örnekler

Çünkü k=100biz
[5, 11, 17, 23, 29, 41, 47, 53, 59, 71, 83, 89] 12 eksiPrimes
ve
[7, 13, 19, 31, 37, 43, 61, 67, 73, 79, 97] 11 artıPrimes

Çünkü k=149biz
[5, 11, 17, 23, 29, 41, 47, 53, 59, 71, 83, 89, 101, 107, 113, 131, 137, 149]
18 eksiPrimes
ve
[7, 13, 19, 31, 37, 43, 61, 67, 73, 79, 97, 103, 109, 127, 139]
15 artıPrimes

kurallar

Kodunuz 2 tamsayı vermelidir : biri MinusPrimes için ve biri de PlusPrimes için istediğiniz sırada (hangisinin hangisi olduğunu belirtin).
Bu : bayt cinsinden en kısa cevap kazanır!

Test Kılıfları

Giriş -> Çıkış [ MinusPrimes , PlusPrimes ]

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

45
Bilmiyordum! :(
Stewie Griffin,

13
@StewieGriffin, modül sekansına bakarsanız sezgi vermek kolaydır: 0%66'nın bir katı, 1%6belirlenemez, 2%62'nin 3%6bir katı, 3'ün 4%6bir katı, 2'nin bir katı ve 5%6belirlenemez.
zzzzBov

3
@zzzzBov, modülün neden bir dizilime sahip olduğunu ve ilkellerin ne anlama geldiğini bilsem çok yardımcı olurdu ... Lise, sayı teorisini öğretmek isterdim ...
Socratic Phoenix,

@SocraticPhoenix, modül "bölümden sonra kalan" anlamına gelir. 0, 6, 12, vs. hepsi 6'ya bölündükten sonra 0 üretir; 1, 7, 13 hepsi 1 üretir. Faktörlere bölünemeyen sayıları aradığımız için, bir sayının 1'den büyük bir tam sayı ile bölünebilir olduğunu bilmek bize sayının asal olmadığını söyler.
zzzzBov

Yanıtlar:


10

05AB1E , 10 9 bayt

Outgolfer Erik sayesinde 1 bayt kaydedildi

Çıkışlar [PlusPrimes, MinusPrimes]

LDpÏ6%5Ñ¢

Çevrimiçi deneyin! veya Test Paketi olarak

açıklama

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


6

Python 2,77 bayt

Neil sayesinde -2 bayt

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

Çevrimiçi deneyin!

Önceki çözüm, 83 81 79 bayt

Bay Xcoder-1 bayt sayesinde
Halvard Hummel-2 bayt sayesinde

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

Çevrimiçi deneyin!
Her ikisi de [MinusPrimes, PlusPrimes] olarak çıktı





Çok fazla JavaScript dizi anlaşması yaptım - Python listelerinin genellikle s'a ihtiyaç duymadığını unutmuşum [].
Neil,

Böylece, n'nin i'den n-1'e kadar sayılarla bölündüğünü görmek için asal olup olmadığını, ardından tüm tamsayıları (5,11, ...) ve (7,13, ...) oluşturabilir ve test edip edemeyeceğinizi test edebilirsiniz. Söz konusu sayı var ve onları saymak. Verimli görünüyor. ;)
Yakk

5

Jöle , 7 bayt

s6ÆPSm4

Artı, sonra eksi.

Çevrimiçi deneyin!

Nasıl çalışır

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.

5

Mathematica, 51 bayt

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

Çevrimiçi deneyin!

@ngenisis 4 golf sahası kazandırarak golf oynadı

Mathematica, 47 bayt

sPrime~Array~PrimePi@s~Mod~6~Count~#&/@{5,1}

Modek olarak olabilir ve eğer ilk argümanı sisimlendirecekseniz, sadece adlandırılmış bir argümanı kullanın:sPrime~Array~PrimePi@s~Mod~6~Count~#&/@{5,1}
ngenisis

5

Japt , 15 13 11 bayt

Çıktı sırası [+,-].

õj ò6 yx ë4

Dene

  • Dennis'in Jelly çözümünden ilham aldı , ancak golf oynadıktan sonra bir liman olmak daha yakın.
  • 2 bayt ë, diziler için önceden bilinmeyen bana yöntem getirerek Oliver'a teşekkür etti .

açıklama

Tamsayının örtük girişi U.

õj

õ1 ile 1 arasında bir tamsayı dizisi oluşturun Uve her birinin bir asal ( j) olup olmadığını kontrol edin , bir dizi boolean verin.

ò6

Diziyi, 6 uzunluğundaki alt dizilere ayırın.

yx

Transpose ( y) ve sütunları toplayın.

ë4

Dizinin her 4. elemanını alın ve bunları örtük olarak çıkarın.


Orijinal, 19 17 16 15 bayt

õ fj
5â £è_%6¥X

Dene

  • Bir diziye 15 bölü defne dinlendikten sonra Oliver'ın 5 bölenlerini kullanması için Oliver'ın ilham önerisi sayesinde 1 bayt.

3

J , 23 bayt

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

Çevrimiçi deneyin!

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)

3

Retina , 53 51 bayt

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

*M`111
\b1\b

Çevrimiçi deneyin! Açıklama:

.+
$*

Birliğe dönüştür.

1
$`1¶

1 ile 1 arasında sayın n.

G`1111

4'ten küçük sayıları silin.

A`^(11+)\1+$

Bileşik sayıları silin.

1{6}

Kalan modülo 6'yı al.

*M`111

Kalan sayısı 3 ile 5 arasında olan sayıları yazdırın.

\b1\b

Geriye kalanı 1 olan sayıları yazdırın.


3

Ruby, 61 60 bayt

( -rprimesBayrak için 52 bayt + 8 )

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

Formun bir dizisini döndürür [artı asal, eksi asal].

GB sayesinde 1 bayt kaydedildi!

Çevrimiçi deneyin.


Cevabınızdan ilham aldım ve benimki (Haskell'de) güncellendi!
temmuz

@jferard Bunu duyduğuma çok sevindim! :)
Cristian Lupascu

countSplat operatörü olmadan aralıkta kullanabilirsiniz (1 byte tasarruf edin).
GB

3

Perl 6 , 42 bayt

İşe yaramaz bir boşluk kaldırarak 1 byte kurtarıldı ...

Aramayı yeniden düzenleyerek 2 bayt kurtarıldı map - @Joshua sayesinde.

.round Eşittir çünkü 3 bayt kaydedildi.round: 1 .

Aslında karmaşık üstel soğuktur ama karakteristik olarak çok pahalıdır. Sadece baytlayarak 10 bayt kurtardı ...

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

Çevrimiçi deneyin!

Bu, üstel üssel olan versiyondu. (Silmek için çok fazla şey hoşuma gidiyor.) Yeni sürüm tamamen aynı şekilde çalışıyor, sadece üstel karmaşık üstel çok daha kısa üçlü operatör tarafından değiştiriliyor.

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

Çevrimiçi deneyin!

Çıktı karmaşık bir sayıdır (PlusPrimes) + (MinusPrimes)i. Umarım kurallara aykırı değildir.


Açıklama: Bir tamsayı argümanını alan bir fonksiyondur. 5'ten argümanına ( (5..$_)) kadar tüm tamsayıları yineliyoruz . Bunların her biri için, .is-prime(buna isimlendirilir $_, eşlenen bloğun argümanını) değerlendiriyoruz, ((eğer True == 1, False == 0) exp(0) = 1için $_%6 = 1) ya da (için ) ya da (için ) olmak üzere yapılmış karmaşık bir üstelle çarpıp exp(iπ/2) = i(ve $_%6 = 5) en yakın tam sayı. Onları toplayarak [+]sonuç verir.

Sonunda: gerçekten verimli, bu yüzden daha yüksek sayılar için çıktınızı almadan TIO'nun zaman aşımına uğramayacağından emin değilim (1e5 için makinemde 26 saniye sürer ve TIO biraz daha yavaş olma eğilimindedir).


bu iyi. aferin!

Demek istediniz de verimli? Yine de güzel bir yöntem!
Jonathan Allan,

İronide kaba bir girişimdi: --).
Ramillies

Golf oynarken, yöntem formlarını kullanmak mapveya grepbazen birkaç karaktere mal olabilir. Bu 2 karakter kazandırır:{[+] map {.is-prime*exp(π*($_%6-1)i/8).round: 1},5..$_}
Joshua

Bunu burada unuttum, dikkatimi çektiğiniz için teşekkürler!
Ramillies

2

Aslında , 21 bayt

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

Çevrimiçi deneyin!

Önce PlusPrimes'i, ardından MinusPrimes'i çıktılar

Açıklama:

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)


2

MATLAB 2017a, 29 Bayt

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

Açıklama: primes(k)k dahil tüm astarları alır. mod(primes(k),6)'tüm primerlerin 6 modülünü alır ve toplamı doğru boyut boyunca ilerletecek şekilde dönüştürür. ==[5,1]ilk beş sütunda tüm beşleri (eksiPrimes) 1, ikinci sütunda tüm beşleri (eksiPrimes) 1 olarak ayarlar. sum()her sütunu toplar.

Bu çıkışlar [minusPrime, plusPrime]


2

Japt , 18 16 bayt

@Oliver sayesinde -2 bayt

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

Çevrimiçi deneyin!

Biçiminde çıktılar [PlusPrimes, MinusPrimes].


Hmm ... Masama yeni döndüm, benimkileri 17 byte'a düşürdüm ve sonra bunu gönderdiğini gördüm ... Onu göndermem gerekip gerekmediğini bilmiyorum. [5,1]sayıları almak için ve oraya önce sen.
Shaggy

@Shaggy IMO, çözümünüzün ayrı bir gönderi olarak kalması için yeterince farklılığa sahip. Kullanılan filter ve bir dize; Eşleme işlevini õve bir diziyi kullandım. Ayrıca, [5,1]fikri başka bir cevaptan aldım .
Justin Mariner,

Biraz düşüneceğim; farklı yöntemler kullanarak benzer yöntemler kullanarak çözümler (biri diğerinden "ödünç alsa bile") tamamdır, ancak aynı dildeki 2 çözüm de benimle tamamen uyuşmuyor. Şimdilik bir alternatif olarak gönderimde düzenleme yaptım.
Shaggy

Onunla koşmaya karar verdim ve sonra başka bir baytı traş oldum.
Shaggy

Sen kullanabilirsiniz almak için[1,5]
Oliver

2

C #, 202 179 174 Bayt

-23 Bay Xcoder sayesinde bayt

-5 Bayt Cyoce sayesinde

Bir dizi uzunluk döndüren işlev 2, [MinusPrimes, PlusPrimes] Arayarak çalıştır 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;}

Çevrimiçi Deneyin'de düzgün biçimlendirilmiş kod: İşte


Bir tio bağlantısı ekleyebilir misin?
Bay Xcoder

Bayt-bayt 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;}
golfü

193 bayt: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;}
Bay Xcoder

Bu sevgiyi sevmiyorsanız;)
MysticVagabond

1
Tüm yardımlarınız için teşekkürler, ayrı bir cevap gönderdiğiniz ve onun bir golf sahası olduğunu belirttiğim için, benimkini olduğu gibi bırakıp bir sonraki mücadeleye dersleri alacağım: P
MysticVagabond

2

Haskell , 81 69 bayt

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

Çevrimiçi deneyin!

İlk çözüm şuydu:

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)

Ama w0lf'in Ruby'deki cevabını okudum ...


1

Pyth , 15 bayt

/K%R6fP_TSQ5/K1

Test odası.

Pyth , 16 bayt

m/%R6fP_TSQd,1 5

Test odası.


Nasıl?

Açıklama # 1

/ K% R6fP_TSQ5 / K1 - Tam program.

     fP_TSQ - [1 ... input] aralığındaki primeleri filtre edin.
  Her birinde% R6 - Mod 6.
 K - Onları K değişkenine atayın.
/ 5 - 5'teki K oluşumunu say
            / K1 - K 'deki 1 oluşumunu say
                - Sonuç olarak örtük bir şekilde çıktı alın.

Açıklama 2

m /% R6fP_TSQd, 1 5 - Tam program.

     fP_TSQ - [1 ... input] aralığındaki primeleri filtreleyin
  Her birinde% R6 - Mod 6.
            , 1 5 - Listeye basın [1, 5]
m / d - Her birinin kaç tane olduğunu say.  
                 - Sonuç olarak örtük bir şekilde çıktı alın. 

Alternatifler:

/ K% R6fP_TSQ5 / KhZ (16 bayt)
K% R6fP_TSQ / K5 / K1 (16 bayt)
m /% R6fP_TSQdj15T (16 bayt)
m /% R6fP_TSQd [1 5 (16 bayt)   
m /% R6fP_TSQdsM`15 (17 bayt)
m /% R6.MP_ZSQd, 1 5 (17 bayt)
m /% R6.MP_ZSQdj15T (17 bayt)
m /% R6.MP_ZSQd [1 5 (17 bayt)

2
10k için tebrikler !!
Luis Mendo,

@LuisMendo Çok teşekkürler :-)
Mr.

1

Jöle ,  12, 11  bayt

Sohbette bazı ipuçları için @cairdcoinheringaahing teşekkür ederiz . Sohbete bir byte kaydettiği için @Dennis'e teşekkür ederiz .

ÆR%6ċЀ1,5

Çevrimiçi deneyin!

Jöle , 11 bayt

ÆR%6µ1,5=þS

Çevrimiçi deneyin!

Jöle , 11 bayt

ÆR%6µċ5,ċ1$

Çevrimiçi deneyin!


Bu nasıl çalışıyor?

Açıklama # 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.

Açıklama 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.

Açıklama # 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.

1

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

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

Meydan açıklama ile karşılaştırıldığında ters sırayla iki değerlerine sahip bir tamsayı dizisi döndürür:
[plusPrime, minusPrime].

@Xynos Limanı C # cevabı , 39 40 42 bayt golf yaptıktan sonra . @Nevay'dan başka bir kuyruklu -55 bayt için
devasa yardım .

Açıklama:

Burada dene. (Son test durumu 400000060 sn'lik zaman sınırını biraz aşıyor.)

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

1
106 bayt: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 bayt: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 bayt: 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;}(sizin j++,++j
sayınızla

1
94 bayt: 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 bayt: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 bayt

Tamamen özyinelemeli bir çözümün bir diziyi eşlemekten çok daha kısa olduğu ortaya çıktı!

Çıktı sırası [-,+]. 3490 civarında bir yerde taşma hatasıyla ortaya çıkıyor.

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

Dene

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>


0

CJam , 19 bayt

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

Girdileri STDIN'den alan ve STDOUT aracılığıyla newline ile ayrılmış iki sayıyı çıkaran program.

Çevrimiçi deneyin!

açıklama

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

0

R + numaraları , 66 60 58 40 bayt

Jarko Dubbeldam'a -16 bayt teşekkürler! Daha sonra iki bayt daha golf oynadım.

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

PlusPrimes MinusPrimesStdout'a yazdırır ; stdin'den okur.

tableGirdi vektöründeki değerlerin her oluşumunun sayısını artan değer sırasına göre sıralar. Dolayısıyla, sadece ve iki değer olduğundan ( 1ve 5mod 6), bu tam olarak ihtiyaç duyduğumuz, birlikte , giriş numbers::Primesarasındaki 4ve arasındaki tüm primleri döndüren fonksiyondur .

Çevrimiçi deneyin!

Baz R , 97 91 89 86 65 bayt

Jarko tarafından burada bir sürü bayt kurtarıldı.

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

Bu, bir paket kullanmak yerine, R tabanındaki tüm primerleri hesaplaması dışında, yukarıdakinin neredeyse aynısıdır ve yazdırmak yerine işlev çıktısıyla geri döner. Çıktıda isimleri 1ve 5aşağıdaki sayıları içeren bir tablo döndürdüğünü görebilirsiniz .

Çevrimiçi deneyin!



(Dennis TIO'ya numaralar ekledi, bu yüzden şimdi çalışıyor :))
JAD


all(x%%2:x^.5>0), sıfır olmayan herhangi bir şey zaten acımasız, bu yüzden de all(x%%2:x^.5)çalışıyor
JAD

@JarkoDubbeldam çok hoş! Tüm değerler 4bizim elde edemeyeceğimizden daha büyük olduğu için ortaya çıkıyor, >4çünkü 2artık orada bir asal olarak bulunmayacağız, bu nedenle bunun yerine 40 bayta golf geliyor.
Giuseppe


0

JavaScript (SpiderMonkey) , 151 , 140 , 131 bayt

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])

Çevrimiçi deneyin!

Bir hata düzeltme ve golf ile yardımcı olduğunuz için shaggy teşekkürler.

Açıklama:

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

1
17,15149 için geri döner (Olmalı 18,15). Dizinizin boyutunu 1: TIO artırmanız gerekir . Bu arada, bu sadece "vanilya" ES6, içindeki SpiderMonkey'e özgü bir şey değil. Ayrıca, JS için Yığın Snippet'lerini TIO yerine kullanabilirsiniz. Ve kaldırabileceğiniz çok yeriniz var.
Shaggy,

1
Sizi 131 byte'a indirmek için birkaç hızlı tasarruf daha .
Shaggy,

@Shaggy Bu şekilde azaltabileceğinizi bilmiyordum.
Pureferret
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.