Somme absolue des coefficients polynomiaux de Sidi


28

Contexte

Le polynôme Sidi de degré n - ou le (n + 1) ème polynôme Sidi - est défini comme suit.

définition des polynômes de Sidi

Les polynômes de Sidi ont plusieurs propriétés intéressantes, mais leurs coefficients aussi. Ces dernières forment la séquence OEIS A075513 .

Tâche

Écrire un programme complet ou une fonction qui, étant donné un entier non négatif n , imprime ou renvoie la somme absolue des coefficients du polynôme Sidi de degré n , c'est-à-dire

définition de la sortie prévue

Ces sommes forment la séquence OEIS A074932 .

Si vous préférez une indexation basée sur 1, vous pouvez prendre un entier positif n à la place et calculer la somme absolue des coefficients du n ème polynôme Sidi.

Parce qu'il s'agit de , vous devez rendre votre code aussi court que possible. Toutes les règles standard s'appliquent.

Cas de test (basés sur 0)

 n           Σ

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

Cas de test (basés sur 1)

 n           Σ

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

Réponses:



46

Python 2 , 43 octets

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

Essayez-le en ligne!

Une approche différente

Depuis que j'ai posté ce défi, j'ai essayé de trouver une solution récursive à ce problème. Bien que j'aie échoué en n'utilisant rien de plus que du stylo et du papier, j'ai réussi à transformer la formule du golf en un problème pratique - au moins pour certaines définitions de la pratique - qui en facilitait l'analyse.

Imaginez un jeu télévisé avec des candidats k + m qui fonctionne comme suit.

Au tour 1, tous les candidats doivent accomplir une certaine tâche aussi vite qu'ils le peuvent. Les k candidats qui accomplissent la tâche la plus rapide remportent chacun 1 k $ (un kilodollar) et passent au tour 3.

Au tour 2, les m candidats restants ont une seconde chance de rejoindre l'autre k . On pose une question à chaque candidat. S'ils répondent correctement à la question, ils gagnent 1 k $ et passent au tour 3. Cependant, s'ils ne répondent pas à la question, ils sont éliminés du jeu. Cela signifie que le tour 3 aura entre k et k + m candidats, selon le nombre de candidats pouvant répondre à leurs questions.

Le tour 3 se compose de m autres concours similaires au tour 1. Dans chaque concours, les participants doivent accomplir une certaine tâche. Contrairement au premier tour, un seul candidat reçoit un prix, mais tous les candidats peuvent participer au prochain concours. Chaque concours paie deux fois plus que le concours précédent; le premier paie 2 k $ et le dernier 2 m k $ .

Notez que puisque tous les prix sont des pouvoirs de deux, sachant combien d'argent un candidat a gagné signifie que nous savons s'il a avancé au tour 3 et lequel des concours du tour 3 il a gagné.

Supposons que vous regardiez le jeu télévisé et que le tour 1 soit déjà terminé, donc vous savez quels k candidats ont déjà atteint le tour 3 et quels m candidats sont toujours bloqués au tour 2. De combien de façons le prix en argent restant peut-il être distribué?

Une fois que nous savons lesquels des m candidats du deuxième tour sont passés au tour 3, il est facile de calculer les résultats possibles pour ce scénario spécifique. Si j candidats avancent, il y a k + j candidats au total au tour 3, et donc k + j résultats possibles pour chaque concours. Avec m concours individuels au tour 3, cela donne (k + j) m résultats pour tous les m concours.

Maintenant, j peut prendre n'importe quelle valeur entre 0 et m , selon les candidats qui répondent correctement au tour 2. Pour chaque valeur fixe de j , il existe m C j différentes combinaisons de j candidats qui auraient pu passer au tour 3. Si nous appelons le nombre total de résultats possibles pour k candidats du tour 3 et m candidats du tour 2 g (m, k) , nous obtenons la formule suivante.

formule pour g

Si nous fixons k = 1 , nous obtenons le cas spécial suivant, qui constitue notre nouvelle approche pour résoudre le problème d'origine.

relation entre Sigma et g

Une formule récursive

Maintenant, supposons que vous êtes tombé endormi pendant les publicités après 1 tour, et je me suis juste à temps pour voir qui a remporté le dernier concours du tour 3 et donc le grand prix de 2 m k $ . Vous n'avez aucune autre information, pas même le montant total des prix que ce candidat a gagné. De combien de façons le prix en argent restant peut-il être distribué?

Si le vainqueur était l'un des m candidats du tour 2, nous avons déjà maintenant qu'ils doivent être passés au tour 3 . Ainsi, nous avons effectivement k + 1 candidats au tour 3, mais seulement m - 1 candidats au tour 2. Comme nous connaissons le vainqueur du dernier concours, il n'y a que m - 1 concours avec des résultats incertains, donc il y a g (m - 1, k + 1) résultats possibles.

Si le gagnant est l'un des k candidats qui ont sauté le tour 2, le calcul devient légèrement plus délicat. Comme auparavant, il ne reste plus que m - 1 tours, mais maintenant nous avons encore k candidats au tour 3 et m candidats au tour 2. Étant donné que le nombre de candidats du tour 2 et le nombre de concours du tour 3 sont différents, les résultats possibles ne peuvent pas être calculé avec une simple invocation de g . Cependant, après que le candidat du premier tour 2 ait répondu - à tort ou à raison - le nombre de candidats du tour 2 correspond à nouveau aux concours m-1 du tour 3. Si le candidat avance, il y a k + 1 candidats au tour 3 et donc g (m - 1, k + 1)résultats possibles; si le candidat est éliminé, le nombre de candidats du tour 3 reste à k et il y a g (m - 1, k) résultats possibles. Puisque le candidat avance ou non, il y a g (m - 1, k + 1) + g (m - 1, k) résultats possibles combinant ces deux cas.

Maintenant, si nous ajoutons les résultats potentiels pour tous les candidats k + m qui auraient pu gagner le grand prix, le résultat doit correspondre à g (m, k) . Il y a m candidats au tour 2 qui mènent chacun à g (m - 1, k + 1) résultats potentiels chacun, et k candidats au tour 3 qui mènent à g (m - 1, k + 1) + g (m - 1, k) ceux. En résumé, nous obtenons l'identité suivante.

formule récursive pour g

Avec le cas de base

cas de base pour g

ces deux formules caractérisent complètement la fonction g .

Une implémentation golfique

Tandis que

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

(49 octets, 0**mdonne 1 une fois que m tombe à 0 ) ou même

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

(48 octets, renvoie True au lieu de 1 ) seraient des solutions valides, il y a encore des octets à enregistrer.

Si nous définissons une fonction f qui prend le nombre n de candidats du tour 1 au lieu du nombre m de candidats du tour 2 comme premier argument, c'est-à-dire,

définition de f en termes de g

on obtient la formule récursive

formule récursive pour f

avec boîtier de base

cas de base pour f

Enfin, nous avons

relation entre Sigma et f

de sorte que la mise en œuvre de Python

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

( k/ndonne 1 une fois n = k ) résout la tâche à accomplir avec une indexation basée sur 1.




3

MATL , 12 octets

t:XnG:QG^*sQ

L'entrée est basée sur 0.

Essayez-le en ligne!

Explication

Considérez la saisie 5comme exemple.

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 octets

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

La vectorisation de R est utile ici lors de l'application de la formule.


2

J , 19 octets

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

Utilise l'indexation à base unique.

Essayez-le en ligne!

Explication

+/@((!{:)*>:^{:)@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

1

Maxima, 39 octets

f(n):=sum(binomial(n,k)*(k+1)^n,k,0,n);


0

Axiome, 39 octets

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

code de test et résultats

(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

Gelée , 9 octets

cR×R‘*ƊS‘

Essayez-le en ligne!

Comment ça marche

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.