La séquence de Lehmer-Comtet

12

La séquence de Lehmer-Comtet est une séquence telle que a (n) est la n ième dérivée de f (x) = x x par rapport à x comme évalué à x = 1 .

Tâche

Prenez un entier non négatif en entrée et sortez le n ème terme de la séquence de Lehmer-Comtet.

Il s'agit de , vous devez donc minimiser la taille du fichier de votre code source.

Cas de test

OEIS 5727

Voici les premiers termes du couple dans l'ordre (copié de l'OEIS)

1, 1, 2, 3, 8, 10, 54, -42, 944, -5112, 47160, -419760, 4297512, -47607144, 575023344, -7500202920, 105180931200, -1578296510400, 25238664189504, -428528786243904, 7700297625889920, -146004847062359040, 2913398154375730560, -61031188196889482880
Ad Hoc Garf Hunter
la source

Réponses:

11

Haskell , 77 75 octets, aucune intégration de différenciation

x@(a:b)&y@(c:d)=a*c:zipWith(+)(b&y)(x&d)
s=1:s&(1:scanl(*)1[-1,-2..])
(s!!)

Essayez-le en ligne!

Comment ça fonctionne

Nous représentons une fonction comme sa liste infinie de coefficients de la série de Taylor sur x = 1: f ( x ) = ∑ n = 0 f ( n ) ( x - 1) n / n ! est représenté par [f (1), f ′ (1), f ″ (1),…].

L' &opérateur multiplie deux de ces fonctions à l'aide de la règle de produit. Cela nous permet de définir récursivement la fonction s ( x ) = x x en termes d'elle-même en utilisant l'équation différentielle s (1) = 1, s ′ ( x ) = s ( x ) ⋅ (1 + ln x ), où ln x = ∑ n = 1 (−1) n - 1 ( n - 1)! ( X - 1) n / n !.

Anders Kaseorg
la source
7

Mathematica, 19 octets

D[x^x,{x,#-1}]/.x->1&

-18 octets de @Pas un arbre

J42161217
la source
9
Sauf si je manque quelque chose, vous pouvez obtenir cela beaucoup plus court: D[x^x,{x,#}]/.x->1&19 octets.
Pas un arbre le
en fait 21 octets .. mais oui! beaucoup plus court!
J42161217
Je ne pense pas que vous ayez besoin de -1- la séquence de OEIS commence à n = 0.
Pas un arbre
1
alors ok! 19 octets c'est
J42161217
5

Octave avec package symbolique, 36 32 octets

syms x
@(n)subs(diff(x^x,n),x,1)

Le code définit une fonction anonyme qui génère une variable symbolique avec le résultat.

Essayez-le en ligne!

Luis Mendo
la source
5

Haskell , 57 octets

f 0=1
f n=f(n-1)-foldl(\a k->f(k-1)/(1-n/k)-a*k)0[1..n-1]

Essayez-le en ligne!

Aucun intégré pour différencier ou algèbre. Les sorties flottent.

xnor
la source
4

Python avec SymPy , 77 75 58 57 octets

1 octet enregistré grâce à @notjagan

17 octets enregistrés grâce à @AndersKaseorg

from sympy import*
lambda n:diff('x^x','x',n).subs('x',1)
Uriel
la source
1
lambda n:diff('x**x','x',10).subs('x',1)ne nécessite pas sympy.abc.
Anders Kaseorg
1
Ummm ... où utilisez-vous n?
Zacharý
@ZacharyT merci! Par coïncidence, j'ai testé la proposition d'Anders avec n = 10, donc cela a donné le même résultat :) corrigé maintenant
Uriel
-1 octet en remplaçant x**xpar x^x.
notjagan
2

Python 3 , 150 octets

lambda n:0**n or sum(L(n-1,r)for r in range(n))
L=lambda n,r:0<=r<=n and(0**n or n*L(n-2,r-1)+L(~-n,r-1)+(r-~-n)*L(~-n,r)if r else n<2or-~-n*L(n-1,0))

Essayez-le en ligne!

Complexité d'exécution exponentielle. Utilise la formule donnée dans la page OEIS.

Leaky Nun
la source
n>=r>=0enregistre un octet.
Ad Hoc Garf Hunter
Vous pouvez également enregistrer un octet en le mettant 0**naprès sum(...).
Ad Hoc Garf Hunter
1

Python3 + mpmath 52 octets

from mpmath import*
lambda n:diff(lambda x:x**x,1,n)

-3 octets, merci @Zachary T

Anubhav
la source
1
Vous devez changer la langue en python3 + mpmath, car mpmath n'est pas une bibliothèque standard.
Ad Hoc Garf Hunter
2
Vous pouvez changer votre première ligne en from mpmath import*, et la seconde en diff(lambda x:x**x,1,n). (en supprimant simplement les espaces inutiles)
Zacharý
0

Python 3 , 288 261 octets

Différenciation sans différenciation intégrée.

p=lambda a,n:lambda v:v and p(a*n,n-1)or a
l=lambda v:v and p(1,-1)
e=lambda v:v and m(e,a(p(1,0),l))or 1
a=lambda f,g:lambda v:v and a(f(1),g(1))or f(0)+g(0)
m=lambda f,g:lambda v:v and a(m(f(1),g),m(g(1),f))or f(0)*g(0)
L=lambda n,f=e:n and L(n-1,f(1))or f(0)

Essayez-le en ligne!

Comment ça fonctionne

Chacune des cinq premières lignes définit les fonctions et leurs dérivés et leurs résultats lorsqu'ils sont évalués à 1. Leurs dérivés sont également des fonctions.

  • p est le pouvoir ie a*x^n
  • l est le logarithme ie ln(x)
  • e est exponentielle c'est-à-dire exp(x)
  • a est l'addition ie f(x)+g(x)
  • m est la multiplication ie f(x)*g(x)

Utilisation: par exemple, exp(ln(x)+3x^2)serait représenté par e(l()+p(3,2)). Soit x=e(l()+p(3,2)). Pour trouver sa dérivée, appelez x(1). Pour trouver son résultat une fois évalué à 1, appelez x(0).

Bonus: différenciation symbolique

Leaky Nun
la source
Vous pouvez économiser beaucoup d'octets en utilisant la execcompression. Essayez-le en ligne!
Ad Hoc Garf Hunter