Presque toutes les fonctions peuvent être exprimées comme un polynôme avec des termes infinis.
Par exemple, e^x = 1 + x + x^2/2! + x^3/3! + x^4/4! + ...
Par exemple, sin(x) = x - x^3/3! + x^5/5! - x^7/7! + ...
Les coefficients des n
termes -th forment une séquence, et la fonction correspondante est appelée la fonction génératrice de la séquence.
Les coefficients des n
-èmes termes forment une séquence.
Souvent, le n
-ème terme aurait un dénominateur de n!
. Par conséquent, nous multiplions le coefficient par n!
pour obtenir une autre séquence, dont la fonction de génération exponentielle serait la fonction d'origine.
Par exemple, la séquence dont la fonction de génération exponentielle est e^x
serait 1,1,1,1,...
.
Par exemple, la séquence dont la fonction de génération exponentielle est sin(x)
serait 0,1,0,-1,0,1,0,-1,...
.
Tâche
Votre tâche consiste à trouver le n
-ème terme de la séquence dont la fonction de génération exponentielle est tan(x)
.
Cas de test
n result
0 0
1 1
2 0
3 2
4 0
5 16
6 0
7 272
8 0
9 7936
10 0
11 353792
12 0
13 22368256
14 0
15 1903757312
16 0
17 209865342976
18 0
19 29088885112832
20 0
21 4951498053124096
22 0
23 1015423886506852352
24 0
25 246921480190207983616
26 0
(Copié d' ici .) (Attention: le 0
-ème terme est différent)
Exemple d'implémentation
# copied from https://github.com/Mego/Seriously/blob/v2.0/SeriouslyCommands.py#L16
def memoized(f):
memo = {}
def m_fun(*args):
if args in memo:
return memo[args]
else:
res = f(*args)
memo[args] = res
return res
return m_fun
# copied from https://github.com/Mego/Seriously/blob/v2.0/SeriouslyCommands.py#L169
@memoized
def binomial(n,r):
if r > n:
return 0
elif r==n:
return 1
res = 1
i = 1
while i<=r:
res *= (n+1-i)
res /= i
i+=1
return int(res)
# 2*u(n+1) = Sum_{k=0..n} binomial(n, k)*u(k)*u(n-k)
# from A000111
@memoized
def u(n):
if n<0: return 0
if n==0: return 1
if n==1: return 1
return sum([binomial(n-1,k)*u(k)*u(n-1-k) for k in range(n)])//2
def t(n):
if n%2 == 0: return 0
return u(n)
print('\n'.join([str(x) + ' ' + str(t(x)) for x in range(26)]))
Les références
- Générer une fonction sur Wikipédia
- Fonction de génération exponentielle sur Wikipédia
- Exemple de fonction de génération exponentielle sur Wikipedia
- Génération d'une fonction sur MathWorld
- Fonction de génération exponentielle sur MathWorld
- Série Taylor sur Wikipédia
- Dérivation des 9 premiers termes de la séquence requise
- OEIS obligatoire A009006 (Notez que le
0
-ème terme est différent) - Algorithme
- OEIS A000111: numéros haut / bas
Réponses:
CJam (
33 32 27 26 2320 octets)Démo en ligne
Dissection
Cela implémente essentiellement la récurrence décrite par xnor .
Ou avec une approche assez différente, pour 23 octets:
Démo en ligne . Merci à Dennis pour 3 octets.
Dissection
Ou avec une approche très différente, pour 29 octets:
Démo en ligne
Malheureusement, un cas spécial est requis pour la saisie
0
.Dissection
Vous pensez peut-être "WTF?! Il répond à la mauvaise question." Si c'est le cas, c'est compréhensible, mais les deux approches donnent effectivement les bons résultats .
la source
[WW]3ew
.0
doit être un cas spécial de toute façon, car il est évalué1
.ri_1&a{{1$+}*]W%0+}@*0=
enregistre 3 octets.Julia,
403832 octetsL'entrée et la sortie prennent la forme de l'
BigFloat
art. Essayez-le en ligne!Contexte
La série Maclaurin de la fonction tangente satisfait l'identité
chaque fois que x se trouve dans son rayon de convergence, où B n est un nombre de Bernoulli.
Puisque B 2 (n + 1) et (-1) n ont le même signe, B 2n + 1 = 0 si n> 0 et B 1 = 1/2 , nous pouvons réécrire ce qui précède comme suit.
De plus, chaque fois que n est un entier non négatif, nous avons
où ζ désigne la fonction zêta de Riemann .
De cela, avec la convention 0 0 = 1 , il s'ensuit que
qui est la formule utilisée par l'implémentation.
la source
Python, 57 octets
Moins golfé:
Nous pouvons calculer le
i
e coefficient de la fonction de génération exponentielle en différenciant lesi
temps de fonction tangente et en évaluant à0
. Chaque dérivée est un polynômetan(x)
et sa valeur à 0 est son terme constant.Nous exprimons récursivement le coefficient de
tan(x)**j
dans lai
dérivée e detan
avec la fonctionf(i,j)
. L'expression récursive vient de la relationtan(x)' = 1 + tan(x)**2
.Ainsi, la dérivée de
tan(x)**j
estAinsi, les contributeurs à
tan(x)**j
lai
dérivée e sonttan(x)**(j-1)
ettan(x)**(j+1)
à la(i-1)
dérivée st, chacun avec un coefficient égal à sa puissance. Cela donne l'expression récursiveNotez que nous n'avons pas besoin d'exclure les exposants négatifs
j
car ils évaluent à zéro de toute façon et ne contribuent pas car le croisementj=0
donne un multiplicateur de0
.Le cas de base de
i==0
correspond àtan(x)
lui-même avecj==1
, et zéro coefficients sinon. L'évaluation finale a lieu à terme constantj=0
, qui est inséré comme valeur par défaut.la source
Mathematica, 20 octets
Approche directe. Calculez la n ème dérivée de tan (x) et évaluez-la à x = 0 .
Usage
la source
Haskell, 48 octets
Nous pouvons calculer le
i
e coefficient de la fonction de génération exponentielle en différenciant lesi
temps de fonction tangente et en évaluant à0
. Chaque dérivée est un polynômetan(x)
et la valeur à 0 est son terme constant.Nous exprimons récursivement le coefficient de
tan(x)^j
dans lai
dérivée e detan
avec la fonctioni%j
. L'expression récursive vient de la relationtan(x)' = 1 + tan(x)^2
.Ainsi, la dérivée de
tan(x)^j
estAinsi, les contributeurs à
tan(x)^j
lai
dérivée e sonttan(x)^(j-1)
ettan(x)^(j+1)
à la(i-1)
dérivée st, chacun avec un coefficient égal à sa puissance.la source
Gelée ,
1211 octetsComme la réponse CJam de Peter Taylor , cela calcule le n ème terme de la séquence haut / bas d' Euler si n est impair et les cas spéciaux même n égal à 0 .
Essayez-le en ligne! ou vérifier tous les cas de test .
Comment ça fonctionne
la source
Sauge, 26 octets
Comme les autres solutions dans les langages mathématiques, cette fonction calcule la
n
dérivée e detan(x)
et l'évalue àx = 0
.Essayez-le en ligne
la source
J,
1513 octetsIl y a aussi la fonction intégrée
t:
qui calcule le n ième coefficient de la fonction de génération exponentielle de tan (x) .Merci à @ Leaky Nun de m'avoir rappelé les adverbes de la série Taylor en J qui ont sauvé 2 octets.
Alternative pour 15 octets .
Une autre approche consiste à calculer le n ème dérivée de tan (x) et à l'évaluer à x = 0 .
Remarque: dans J , la quantité de mémoire utilisée par la fonction dérivée
d.
augmente rapidement lorsque n passe à 10.Usage
Explication
la source
Julia,
3937 octetsEnregistré 2 octets grâce à Dennis.
Pas la solution la plus courte de Julia (voir la solution de Dennis), mais celle-ci se fait uniquement en utilisant une logique dérivée ... sous forme de matrices.
Fondamentalement, il utilise le fait que la dérivée de tan (x) est 1 + tan (x) ^ 2. Donc, puisque la dérivée de toute puissance de tan (x), disons tan (x) ^ k, est k tan (x) ^ (k-1) tan (x) '= k tan (x) ^ (k-1) + k tan (x) ^ (k + 1), nous pouvons utiliser une puissance de matrice simple sur une matrice avec les valeurs appropriées pour générer l'expansion, la deuxième ligne ou colonne (selon la construction) contenant les dérivés de tan (x ) lui-même.
Il nous suffit donc de trouver la constante dans l'expression résultante, et c'est la première valeur de la ligne ou de la colonne correspondante.
la source
!n=(spdiagm((0:n,1:n+1),(1,-1))^n)[2]
devrait marcher.spdiagm
cela permettrait ce style de construction -diagm
je l'ai essayé , mais bien sûr, cela n'a pas fonctionné.JavaScript (ES6),
12745 octetsPort des solutions @ xnor.
la source
Haskell,
9593 octetsIl s'agit essentiellement d'une implémentation de la formule générale avec quelques optimisations mineures.
la source
MATLAB avec Symbolic Toolbox, 84 octets
L'exemple s'exécute:
la source
Haskell (trop d'octets)
En utilisant uniquement les opérations sur les listes et le résultat de Raymond Manzoni :
Malheureusement, cela déborde pour des valeurs modestes de
n
, car il utilise desInt
valeurs. Je vais essayer de résoudre le problème en utilisant desInteger
valeurs. D'ici là, les suggestions sont les bienvenues.la source
Axiome, 46 octets
code pour test et résultats
la source