Sidi Polinom Katsayılarının Mutlak Toplamları


28

Arka fon

Derece Sidi polinom n - veya (n + 1) inci Sidi polinom - aşağıdaki gibi tanımlanır.

Sidi polinomlarının tanımı

Sidi polinomlarının bazı ilginç özellikleri vardır, ancak katsayıları da aynıdır. İkincisi, OEIS dizisi A075513'ü oluşturur .

Görev

Negatif olmayan bir tamsayıdır verilen tam bir program ya da bir fonksiyon, yazma , n , derece Sidi polinom katsayılarının baskı ya da döner mutlak toplamı n , yani

amaçlanan çıktının tanımı

Bu toplamlar, OEIS dizisi A074932'yi oluşturur .

Eğer 1 tabanlı indeksleme tercih ederseniz, pozitif bir tamsayı alabilir n yerine ve katsayıları mutlak toplamını hesaplamak n inci Sidi polinomun.

Bu olduğu için kodunuzu mümkün olduğunca kısa tutmalısınız. Tüm standart kurallar geçerlidir.

Test vakaları (0 tabanlı)

 n           Σ

 0           1
 1           3
 2          18
 3         170
 4        2200
 5       36232
 6      725200
 7    17095248
 8   463936896
 9 14246942336

Test vakaları (1 tabanlı)

 n           Σ

 1           1
 2           3
 3          18
 4         170
 5        2200
 6       36232
 7      725200
 8    17095248
 9   463936896
10 14246942336

Yanıtlar:



46

Python 2 , 43 bayt

f=lambda n,k=1:k/n or n*f(n,k+1)+k*f(n-1,k)

Çevrimiçi deneyin!

Farklı bir yaklaşım

Bu mücadeleyi yayınladığımdan beri, bu soruna tekrarlı bir çözüm bulmaya çalıştım. Kalem ve kağıttan başka bir şey kullanmakta başarısız olmama rağmen, formülü golf oynamak için pratik bir probleme dönüştürmeyi başardım - en azından belirli pratik tanımlamalar için - bu da analiz etmeyi kolaylaştırdı.

Aşağıdaki gibi çalışan k + m adaylarıyla bir oyun gösterisi hayal edin .

1. rauntta, tüm adayların mümkün olduğu kadar hızlı bir şekilde belirli bir görevi başarmaları gerekiyor. K görevi en hızlı başarmak adayların kazanmak 1 k $ (bir kilodollar) yuvarlak 3'e her ve peşin.

2. turda, kalan m adayları diğer k'ya katılmak için ikinci bir şans elde eder . Her aday bir soru sorulur. Soruyu doğru cevaplarlarsa, 1 k $ kazanırlar ve 3. turu ilerlerler. Ancak soruyu cevaplayamazlarsa, oyundan çıkarılırlar. Bu, 3. turun k ve k + m adayları arasında kaç kişinin sorularına cevap verebileceğine bağlı olacağı anlamına geliyor .

3. Tur oluşur m her yarışmada 1. yuvarlak benzeyen daha fazla yarışmalar, katılımcılar belirli bir görevi tamamlamak zorunda. 1. raunttan farklı olarak, sadece bir aday bir ödül alır, ancak tüm adaylar bir sonraki yarışmaya katılabilir. Her yarışma, bir önceki yarışmadan iki kat daha fazla ödeme yapar; ilki 2 k $ , sonuncusu 2 m k $ öder .

Tüm ödüllerin ikisinin gücü olduğundan, bir adayın ne kadar para kazanacağını bilmek, 3. turda ilerleyip ilerlemeyeceğini ve 3. turdaki yarışmalardan hangisinin kazandığını bilmek anlamına gelir.

Oyun şovunu izlediğinizi varsayalım ve 1. raunt zaten bitti, yani hangi k adayın 3. rauntta zaten ulaştığını ve hangi rauntın hala 2. raundda kaldığını biliyorsunuz . Kalan ödül parası kaç şekilde dağıtılabilir?

İkinci yuvarlaklık hangi öğrendiğinizde m yuvarlak 3'e gelişmiş adaylar, bu belirli senaryo için olası sonuçlarını hesaplamak kolaydır. Eğer j adayları ilerlerse, 3. turda toplam k + j adayları olur ve bu nedenle her yarışma için k + j sonuçları olasıdır. İle m yuvarlak 3'te bireysel yarışmalar, bu markaların (k + j) m herkes için çıktıları m yarışmaları.

Şimdi, j arasındaki herhangi bir değer alabilir 0 ve m , hangi bağlı adayların her düzeltme değeri için yuvarlak 2. doğru cevap j vardır m C j farklı kombinasyonlar j biz ararsanız yuvarlak 3'e gelişmiş olabilirdi adaylar k tur 3 aday ve m tur 2 aday g (m, k) için olası sonuçların toplamı , aşağıdaki formülü alırız.

g için formül

Eğer k = 1 düzeltilirse , asıl problemi çözmek için yeni yaklaşımımızı oluşturan aşağıdaki özel durumu alırız.

Sigma ve g arasındaki ilişki

Özyinelemeli bir formül

Şimdi, 1. turdan sonra reklamlar sırasında uykuya daldığınızı ve 3. turun son yarışmasını kimin kazandığını ve dolayısıyla 2 m k $ 'lık büyük ödülü kimin kazandığını görmek için tam zamanında uyandığınızı varsayın . Başka bir bilginiz yok, adayın toplamda ne kadar para ödülü kazandığı bile. Kalan para ödülü kaç şekilde dağıtılabilir?

Eğer kazanan 2. raunttaki adaylardan biriyse, şimdiden 3. rauntta ilerlemiş olmaları gerektiğine şimdiden başladık . Böylece, etkin bir var k + 1 3 yuvarlak ama sadece adayları m - 1 Geçen yarışmasının galibi bildiğimiz için yuvarlak 2'de adayları, sadece orada 1 - m yüzden orada, belirsiz sonuçlarla yarışmalar (m g - 1, k + 1) olası sonuçlar.

Kazanan 2. raundu atlayan k adaylardan biriyse , hesaplama biraz zorlaşır. Daha önce olduğu gibi, sadece m - 1 mermi kaldı, ama şimdi hala 3. raundda K adayımız ve 2. raundda m adayımız var. 2. raunt adayların sayısı ve 3. raunt yarışmasının sayısı farklı olduğu için olası sonuçlar g basit bir çağırma ile hesaplanabilir . Ancak, ilk raunt 2 aday cevapladıktan sonra - doğru ya da yanlış - raund 2 adaylarının sayısı bir kez daha m - 1 raunt 3 yarışmalarıyla eşleşir . Aday ilerlerse, k + 1 tur 3 aday vardır ve bu nedenle g (m - 1, k + 1)Olası sonuçlar; Aday elimine edilir ise, yuvarlak 3 adayların sayısının kalır k ve orada gr (m - 1, k) olası sonuçları. Adayın ilerleme göstermesi veya ilerlememesi nedeniyle, bu iki durumu birleştiren g (m - 1, k + 1) + g (m - 1, k) olası sonuçlar vardır.

Şimdi, büyük ödülü kazanabilecek tüm k + m adayları için potansiyel sonuçları eklersek, sonuç g (m, k) ile eşleşmelidir . Her biri g (m - 1, k + 1) potansiyel sonuçlara yol açan m round 2 yarışmacı, g (m - 1, k + 1) + g (m - 1, k) yol açan k round 3 yarışmacı var olanlar. Özetle, şu kimliği alıyoruz.

g için özyinelemeli formül

Temel kasa ile birlikte

g için baz kılıf

bu iki formül g fonksiyonunu tamamen karakterize eder .

Bir golfy uygulaması

Süre

g=lambda m,k=1:0**m or(m+k)*g(m-1,k+1)+k*g(m-1,k)

(49 bayt 0**mverir 1 kez m damla 0 ) ya da

g=lambda m,k=1:m<1 or(m+k)*g(m-1,k+1)+k*g(m-1,k)

(48 bayt, 1 yerine True döndürür ) geçerli çözümler olurdu, kaydedilecek baytlar var.

Bir fonksiyonu tanımlarsak f numarası alır n yerine numarası tur 1 aday m , yani ilk bağımsız değişken olarak yuvarlak 2 aday,

f nin g cinsinden tanımı

özyinelemeli formülü alırız

f için özyinelemeli formül

temel durum ile

f için baz durumda

Sonunda biz var

Sigma ve f arasındaki ilişki

bu yüzden Python uygulaması

f=lambda n,k=1:k/n or n*f(n,k+1)+k*f(n-1,k)

( 1 kez k/nverim 1 = n ) eldeki görevi 1 tabanlı dizinlemeyle çözer.




3

MATL , 12 bayt

t:XnG:QG^*sQ

Giriş 0 tabanlıdır.

Çevrimiçi deneyin!

açıklama

5Bir örnek olarak girişi düşünün .

t      % Take n implicitly. Duplicate
       % STACK: 5, 5
:      % Range [1 2 ...n]
       % STACK: 5, [1 2 3 4 5]
Xn     % N-choose-k, vectorized
       % STACK: [5 10 10 5 1]
G:Q    % Push [2 3 ... n+1]
       % STACK: [5 10 10 5 1], [2 3 4 5 6]
G^     % Raise to n
       % STACK: [5 10 10 5 1], [32 243 1024 3125 7776]
*      % Multiply, element-wise
       % STACK: [160 2430 10240 15625 7776]
s      % Sum of array
       % STACK: 36231
Q      % Add 1. Display implicitly
       % STACK: 36232

2

R, 36 bayt

sum(choose(n<-scan(),0:n)*(0:n+1)^n)

Formülün uygulanmasında R'nin vektörü kullanışlı olur.


2

J , 19 bayt

+/@((!{:)*>:^{:)@i.

Bir tabanlı endeksleme kullanır.

Çevrimiçi deneyin!

açıklama

+/@((!{:)*>:^{:)@i.  Input: integer n
                 i.  Range [0, 1, ..., n-1]
   (           )@    Operate on that range
             {:        Get the last value, n-1
          >:           Increment, range becomes [1, 2, ..., n]
            ^          Exponentiate. [1^(n-1), 2^(n-1), ..., n^(n-1)]
    ( {:)              Get the last value, n-1
     !                 Binomial coefficient. [C(n-1, 0), C(n-1, 1), ..., C(n-1, n-1)]
         *             Multiply
+/@                  Reduce by addition



0

Aksiyom, 39 bayt

f(n)==sum(binomial(n,i)*(i+1)^n,i=0..n)

test kodu ve sonuçları

(35) -> [[i,f(i)] for i in 0..9]
   (35)
   [[0,1], [1,3], [2,18], [3,170], [4,2200], [5,36232], [6,725200],
    [7,17095248], [8,463936896], [9,14246942336]]

0

Jöle , 9 bayt

cR×R‘*ƊS‘

Çevrimiçi deneyin!

Nasıl çalışır

cR×R‘*ƊS‘ - Main link. Argument: n (integer)        e.g.   5
 R        - Range from 1 to n                              [1, 2, 3, 4, 5]
c         - Binomial coefficient                           [5, 10, 10, 5, 1]
      Ɗ   - Last three links as a monad:
   R      -   Link 1: Range from 1 to n                    [1, 2, 3, 4, 5]
    ‘     -   Link 2: Increment                            [2, 3, 4, 5, 6]
     *    -   Link 3: To the power of n                    [32, 243, 1024, 3125, 7776]
  ×       - Multiply, pairwise                             [160, 2430, 10240, 15625, 7776]
       S  - Sum                                            36231
        ‘ - Increment                                      36232
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.