Pascal Başbakanı mı?


18

Tek primellerin Pascal üçgeninde tam olarak iki kez görüneceği iyi bilinmektedir. Bununla birlikte, Pascal üçgeninde tam olarak iki kez görünen tüm sayılar asal değildir. Bu sayılara Pascal primes diyeceğiz.

Pascal primerleri, Pascal üçgeninde tam olarak iki kez görünen bileşik sayılardır. İlk birkaç Pascal primeri

4, 8, 9, 12, 14, 16, 18, ...

Zorluğunuz, n'nin bir Pascal asal olup olmadığına bağlı olarak n giriş ve çıkışı doğru veya yanlış olarak pozitif bir tamsayı almaktır . Bu kod golf, bu yüzden en kısa program kazanır!



2
Bir Pascal asal değilse True, yanlışsa çıktı alabilir miyiz?
Caird coinheringaahing


@cairdcoinheringaahing hayır, verilen gereksinim içinde olmalıdır.
Tek Güzel Güzel Sanat

Pascal'da kimsenin bir cevap göndermediğine şaşırdım. Zaman alırsam (ve eski Pascal derleyicimi bulabilirsem) yapacağım.
manassehkatz-Eski Monica Monica

Yanıtlar:


10

Wolfram Dili (Mathematica) , 45 bayt

CompositeQ@#&&Binomial~Array~{#-1,#}~FreeQ~#&

Çevrimiçi deneyin!

Her bileşik sayı n , satır n'de tam olarak iki kez görünür ve daha sonra görünemez. Bu nedenle, Pascal primerlerinin koşulu, ilk n-1 satırlarında hiç görünmemeleridir .

Anlayabildiğim kadarıyla, bu ilk n satırda tam olarak iki kez göründüğünü kontrol etmek ve !PrimeQbunun yerine kullanabilmek daha kısa .


4

Python 2 , 93 bayt

def f(n):l=[1];exec"(n in l)>=any(n%k<1for k in range(2,n))>q;l=map(sum,zip([0]+l,l+[0]));"*n

Çevrimiçi deneyin!

Bu, çıkış kodu ile çıkış yapan , Pascal Primes için 0 , aksi takdirde 1 adlı bir işlev f işlevidir .

Bu nasıl çalışır?

def f(n):l=[1];                       # Define a function f (arg. n) and a list l = [1].
exec"..."*n                           # Execute n times.
(n in l)                              # Boolean: "n is in l?" is greater than...
   >=any(n%k<1for k in range(2,n))    # the boolean: "Is n composite?"?
            >q;                       # If the boolean comparison returns a falsy
                                      # result, then continue on without any difference.
                                      # Otherwise, evaluate the other part of the
                                      # inequality, thus performing "is greater than q".
                                      # Since we have no variable "q", this terminates
                                      # with exit code 1, throwing a "NameError".
l=map(sum,zip([0]+l,l+[0]));          # Generate the next row in Pascal's triangle,
                                      # By zipping l prepended with a 0 with l appended
                                      # with a 0 and mapping sum over the result.

Bu temelde n'nin Pascal üçgeninin ilk n - 1 sırasında mı yoksa asal olup olmadığını kontrol eder ve bu iki koşuldan herhangi biri karşılanırsa bir hata atar.

Sayesinde 1 bayt kaydedildi Ovs .



@ovs: o Çok akıllıca! Teşekkürler.
Bay Xcoder

4

Jöle , 11 10 9 bayt

Sayesinde:

  • -1 bayt için Martin Ender! (başka bir yaklaşım, kullanım (+1)n2 (-2) kullanmaktan kaçının , yani -1.
  • Jonathan Allan hata düzeltmesi için.
  • -1 bayt için Dennis .
Ḷc€ḶFċ=ÆP

Çevrimiçi deneyin!

Alternatif yaklaşım , Jonathan Allan . (kusurlu)

----------- Explanation -----------
Ḷ            Lowered range. [0, 1, ..., n-1]
 c€Ḷ           `c`ombination `€`ach with `Ḷ`owered range [0...n-1]
    F        Flatten.
     ċ       Count the number of occurences of (n) in the list.
       ÆP    Returns 1 if (n) is a prime, 0 otherwise.
      =      Check equality.

Son satır için açıklama:

  • Martin Ender'in işaret ettiği gibi, " nPascal üçgeninde iki kez görünür " ifadesi "n ilk n-1satırlarda görünmez .
  • trueSayı asal değilse (yani ÆP == 0) ve sayı csıfırsa geri dönmek istiyoruz . Bundan çıkarabiliriz ÆP == c.
    Eşitlerse, 0'a eşit oldukları kanıtlanabilir, çünkü:
    • ÆP yalnızca 0 veya 1 olabilen bir boole değeri döndürür.
    • 1 döndürürse n, bu bir asaldır, bu nedenle ilkinde görünemezn-1 satırlarda (yani, c == 0)

1bir Pascal üssü değildir; bu öyle diyor.
Jonathan Allan

Ḷc€ḶFċoÆP¬sanırım işe yarar.
Jonathan Allan

ċ=ÆPçalışmalı.
Dennis

FYI Yaklaşımımda bir kusur buldum ve sildim.
Jonathan Allan

BTW Ḷcþ`Fċ=ÆPda çalışmalıdır.
Bay Xcoder

4

Haskell , 86 84 bayt

p=[]:[zipWith(+)(1:x)x++[1]|x<-p]
f n=all((>0).rem n)[2..n-1]==any(elem n)(take n p)

Çevrimiçi deneyin!

açıklama

İşlev p, dejenere bir Pascal üçgenini özyinelemeli olarak tanımlar:

[]
[1]
[2,1]
[3,3,1]
[4,6,4,1]
[5,10,10,5,1]

Gördüğümüz gibi (bu çözümde 1biraz özeldir) her sayı th satırında ntam olarak iki kez görünür n+1ve sonraki satırların tüm öğeleri daha da büyür, bu nedenle yalnızca th satırına nkadar bir yerde olup olmadığını kontrol etmemiz gerekir. nöğe diskalifiye edildi:

any(elem n)(take(n-1)p)

Şimdi elimizdeki True(hariç iki kereden fazla görünen tüm elementler için 1hepimiz ihtiyacı hatalı sahip olmaktır böylece) isPrimefonksiyonunu bu döner Trueiçin 1:

all((>0).rem n)[2..n-1]

4

APL (Dyalog) , 44 34 24 19 bayt

@Cowsquack sayesinde 5 bayt tasarruf edildi

(~0∊⊢|⍨2↓⍳)⍱⊢∊⍳∘.!⍳

Çevrimiçi deneyin!

Nasıl?

Biz her ikisinin de

- aralık 0.. n-1,

⍳∘.! - benekli kartezyen binom üzerine

⊢∊- içerir n,

- ne de

⊢|⍨- nher öğeyi modulo

2↓⍳- menzil 2..n-1

~0∊- içermiyor 0(diğer bir deyişle bölünemez)


Bir trene dönüştürmek (∨/1↓1≠⊢∨⍳)∧(~⊢∊⍳∘.!⍳)iki bayt daha kısadır
Kritixi Lithos

@Cowsquack hmm Bir trenin sığabileceği kadar kısa olduğunu fark etmedim (40 byter olarak başladı). Teşekkürler!
Uriel

(0∊⊢|⍨2↓⍳)∧∘~⊢∊⍳∘.!⍳ bir diğer ikisi için, öncelik kontrolü algoritmasını değiştirdim
öncelik

@Cowsquack oo zeki. Daha önce hiç bu ilkelik varyasyonunu görmedim
Uriel

Yeniden düzenleme ~verir (~0∊⊢|⍨2↓⍳)⍱⊢∊⍳∘.!⍳bir tane daha az byte için.
Kritixi Lithos

2

JavaScript (node.js) , 103 101 bayt

n=>(r=x=>[...Array(n).keys(F=n=>n>0?n*F(n-1):1)].every(x))(i=>r(j=>F(i)/F(j)/F(i-j)-n))>r(i=>i<2|n%i)

Çevrimiçi deneyin!


n=>(r=x=>[...Array(n).keys(F=n=>n>0?n*F(n-1):1)].every(x))(i=>r(j=>F(i)/F(j)/F(i-j)-n))>F(n-1)**2%nÜçlü çalışır ama aslında küçük bir aralık için
l4m2


2

R , 55 bayt

function(n)sum(!n%%1:n)>2&!n%in%outer(1:n-1,1:n,choose)

Çevrimiçi deneyin!

sum(!n%%1:n)>2Kompozit testi ve olduğu outer(1:n-1,1:n,choose)değerlerini hesaplar satırları 0için n-1biz emin bu yüzden, Pascal üçgeninin norada görünmüyor.


2

05AB1E , 10 bayt

ÝDδcI¢IpÌQ

Çevrimiçi deneyin!

açıklama

Ý            # push range [0 ... input]
 D           # duplicate
  δc         # double vectorized command binomial
    I¢       # count occurrences of input
      Ip     # check input for primality
        Ì    # add 2
         Q   # compare for equality

nİlk n + 1 paskal üçgeni satırında tam olarak iki kez gerçekleşen ve asal olmayan kontroller .
Üçgen içinde 3 kez meydana gelebilecek hiçbir asal olmadığı için karşılaştırma yapılır.





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.