Fast jede Funktion kann als Polynom mit unendlichen Termen ausgedrückt werden.
Beispielsweise, e^x = 1 + x + x^2/2! + x^3/3! + x^4/4! + ...
Beispielsweise, sin(x) = x - x^3/3! + x^5/5! - x^7/7! + ...
Die Koeffizienten der n
-ten Terme bilden eine Folge, und die entsprechende Funktion wird als Erzeugungsfunktion der Folge bezeichnet.
Die Koeffizienten der n
-ten Terme bilden eine Folge.
Oft hätte der n
-te Term einen Nenner von n!
. Daher multiplizieren wir den Koeffizienten mit n!
, um eine andere Sequenz zu erhalten, deren Exponentialerzeugungsfunktion die ursprüngliche Funktion wäre.
Zum Beispiel kann die Sequenz , deren Funktion Exponential Generierung ist e^x
wäre 1,1,1,1,...
.
Zum Beispiel kann die Sequenz , deren Funktion Exponential Generierung ist sin(x)
wäre 0,1,0,-1,0,1,0,-1,...
.
Aufgabe
Ihre Aufgabe ist es, den n
-ten Term der Sequenz zu finden, deren Exponential Generating Function ist tan(x)
.
Testfälle
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
(Von hier kopiert .) (Warnung: der 0
-te Begriff ist anders)
Beispielimplementierung
# 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)]))
Verweise
- Generierungsfunktion auf Wikipedia
- Exponentielle Erzeugungsfunktion bei Wikipedia
- Beispiel für eine exponentielle Generierungsfunktion in Wikipedia
- Generierungsfunktion in MathWorld
- Exponentielle Generierungsfunktion in MathWorld
- Taylor-Reihe auf Wikipedia
- Ableitung der ersten 9 Terme der erforderlichen Reihenfolge
- Obligatorisch OEIS A009006 (Beachten Sie, dass der
0
-te Begriff unterschiedlich ist) - Algorithmus
- OEIS A000111: Aufwärts- / Abwärtsnummern
Antworten:
CJam (
33 32 27 26 2320 Byte)Online-Demo
Präparation
Dies implementiert im Wesentlichen die von xnor beschriebene Wiederholung .
Oder mit einem etwas anderen Ansatz für 23 Bytes:
Online-Demo . Danke an Dennis für 3 Bytes.
Präparation
Oder mit einem ganz anderen Ansatz für 29 Bytes:
Online-Demo
Für die Eingabe ist leider ein Sonderfall erforderlich
0
.Präparation
Sie denken vielleicht "WTF ?! Er beantwortet die falsche Frage." Wenn ja, ist das verständlich, aber beide Ansätze liefern in der Tat die richtigen Ergebnisse .
quelle
[WW]3ew
.0
dies ohnehin ein Sonderfall sein muss, da es sich dabei um einen Wert handelt1
.ri_1&a{{1$+}*]W%0+}@*0=
Spart 3 Bytes.Julia,
403832 BytesEin- und Ausgabe erfolgt in Form von
BigFloat
s. Probieren Sie es online!Hintergrund
Die Maclaurin-Reihe der Tangensfunktion erfüllt die Identität
wenn x in seinem Konvergenzradius liegt, wobei B n eine Bernoulli-Zahl ist.
Da B 2 (n + 1) und (-1) n dasselbe Vorzeichen haben, B 2n + 1 = 0, wenn n> 0 und B 1 = 1/2 , können wir das Obige wie folgt umschreiben.
Außerdem haben wir immer dann, wenn n eine nicht negative ganze Zahl ist
wobei ζ die Riemannsche Zetafunktion bezeichnet .
Daraus folgt mit der Konvention 0 0 = 1 , dass
Welches ist die Formel, die die Implementierung verwendet.
quelle
Python, 57 Bytes
Weniger golfen:
Wir können den
i
Koeffizienten der exponentiellen Erzeugungsfunktion berechnen, indem wir die Tangensfunktionszeiten differenziereni
und bei auswerten0
. Jede Ableitung ist ein Polynom intan(x)
und ihr Wert bei 0 ist ihr konstanter Term.Wir drücken den Koeffizienten von rekursiv
tan(x)**j
in deri
Ableitung vontan
mit der Funktion ausf(i,j)
. Der rekursive Ausdruck stammt aus der Relationtan(x)' = 1 + tan(x)**2
.So ist die Ableitung von
tan(x)**j
ISDie Mitwirkenden
tan(x)**j
in deri
th-Ableitung sind alsotan(x)**(j-1)
undtan(x)**(j+1)
in der(i-1)
st-Ableitung, wobei jeder Koeffizient seiner Potenz entspricht. Dies ergibt den rekursiven AusdruckBeachten Sie, dass wir negative Exponenten nicht ausschließen müssen,
j
da sie ohnehin mit Null bewertet werden und keinen Beitrag leisten, da die Kreuzungj=0
einen Multiplikator von ergibt0
.Der Grundfall von
i==0
entspricht sichtan(x)
selbstj==1
und sonst Nullkoeffizienten. Die endgültige Auswertung erfolgt zum konstanten Termj=0
, der als Standardwert eingegeben wird.quelle
Mathematica, 20 Bytes
Unkomplizierter Ansatz. Berechnen Sie die n- te Ableitung von tan (x) und bewerten Sie sie bei x = 0 .
Verwendung
quelle
Haskell, 48 Bytes
Wir können den
i
Koeffizienten der exponentiellen Erzeugungsfunktion berechnen, indem wir diei
Zeiten der Tangensfunktion differenzieren und bei auswerten0
. Jede Ableitung ist ein Polynom intan(x)
und der Wert bei 0 ist sein konstanter Term.Wir drücken den Koeffizienten von rekursiv
tan(x)^j
in deri
Ableitung vontan
mit der Funktion ausi%j
. Der rekursive Ausdruck stammt aus der Relationtan(x)' = 1 + tan(x)^2
.So ist die Ableitung von
tan(x)^j
ISDie Mitwirkenden
tan(x)^j
in deri
th-Ableitung sind alsotan(x)^(j-1)
undtan(x)^(j+1)
in der(i-1)
st-Ableitung, wobei jeder Koeffizient gleich seiner Potenz ist.quelle
Jelly ,
1211 BytesWie Peter Taylor CJam antworten , berechnet dies die n - ten Laufzeit von Eulers up / down - Sequenz , wenn n ungerade und Sonderfälle sind auch n als 0 .
Probieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
Salbei, 26 Bytes
Wie die anderen Lösungen in mathematisch orientierten Sprachen berechnet diese Funktion die
n
th-Ableitung vontan(x)
und wertet sie bei ausx = 0
.Probieren Sie es online aus
quelle
J,
15 bis13 BytesEs gibt auch das Builtin,
t:
das den n- ten Koeffizienten der exponentiellen Erzeugungsfunktion von tan (x) berechnet .Vielen Dank an @ Leaky Nun , der mich an die Adverbien der Taylor-Reihe in J erinnert hat, die 2 Bytes gespart haben.
Alternative für 15 Bytes .
Ein anderer Ansatz besteht darin, die n- te Ableitung von tan (x) zu berechnen und bei x = 0 zu bewerten .
Anmerkung: In J nimmt die von der Ableitungsfunktion verwendete Speichermenge
d.
schnell zu, wenn n 10 überschreitet.Verwendung
Erläuterung
quelle
Julia,
3937 Bytes2 Bytes gespart dank Dennis.
Nicht die kürzeste Julia-Lösung (siehe Dennis 'Lösung), aber diese wird ausschließlich mit der abgeleiteten Logik durchgeführt ... in Form von Matrizen.
Grundsätzlich wird die Tatsache ausgenutzt, dass die Ableitung von tan (x) 1 + tan (x) ^ 2 ist. Da also die Ableitung einer Potenz von tan (x), sagen wir tan (x) ^ k, k tan (x) ^ (k-1) tan (x) '= k tan (x) ^ (k-1) + k tan (x) ^ (k + 1) können wir eine einfache Matrixleistung auf einer Matrix mit den entsprechenden Werten verwenden, um die Expansion zu erzeugen, wobei die zweite Zeile oder Spalte (je nach Konstruktion) die Ableitungen von tan (x) enthält ) selbst.
Wir müssen also nur die Konstante im resultierenden Ausdruck finden, und das ist der erste Wert in der entsprechenden Zeile oder Spalte.
quelle
!n=(spdiagm((0:n,1:n+1),(1,-1))^n)[2]
sollte arbeiten.spdiagm
dass ich diesen Baustil zulassen würde - versuchte es damitdiagm
, aber natürlich funktionierte es nicht.JavaScript (ES6),
127 -45 BytePort von @ xnors Lösungen.
quelle
Haskell,
9593 BytesEs handelt sich im Grunde genommen um eine Implementierung der allgemeinen Formel mit einigen geringfügigen Optimierungen.
quelle
MATLAB mit Symbolic Toolbox, 84 Byte
Beispiel läuft:
quelle
Haskell (zu viele Bytes)
Verwenden Sie nur Operationen für Listen und Raymond Manzonis Ergebnis :
Leider läuft dies bei bescheidenen Werten über
n
, da esInt
Werte verwendet. Ich werde versuchen, das Problem mitInteger
Werten zu beheben . Bis dahin sind Vorschläge willkommen.quelle
Axiom, 46 Bytes
Code für Test und Ergebnisse
quelle