Hintergrund
Es kann , dass für jede ganze Zahl angezeigt k >= 0
, f(k) = tan(atan(0) + atan(1) + atan(2) + ... + atan(k))
eine rationale Zahl ist.
Tor
Schreiben Sie ein komplettes Programm oder eine Funktion, die bei Angabe als einzelner reduzierter Bruch ausgegeben k >= 0
wird f(k)
(Zähler und Nenner sind Koprime).
Testfälle
Die ersten Werte sind
f(0) = (0,1)
f(1) = (1,1)
f(2) = (-3,1)
f(3) = (0,1)
f(4) = (4,1)
f(5) = (-9,19)
f(6) = (105,73)
Regeln
- Standardlücken sind verboten.
- Die Ein- und Ausgabe kann in jedem beliebigen Format erfolgen. Sie können
f(k)
als Zeichenfolgenumerator/denominator
, als Tupel aus zwei Ganzzahlen, als Bruch oder als rationales Objekt usw. ausgeben. Wenn Sie eine Zeichenfolge ausgeben, geben Sie nur zwei Ganzzahlen an, d. H. Ausgabe3/2
anstelle von1 1/2
. - Dies ist Code-Golf, die kürzeste Antwort (in Bytes) gewinnt.
atan(0)
Begriff ist unnötig.Antworten:
M , 11 Bytes
Probieren Sie es online!
Verwendet die OEIS-Formel
x(n) = (x(n-1)+n)/(1-n*x(n-1))
mitx(0) = 0
.quelle
Mathematica, 28 Bytes
Probieren Sie es online!
Ein längerer, aber interessanterer Ansatz (32 Bytes):
Probieren Sie es online!
quelle
o'_'o
Mathematica und seine eingebauteno'_'o
Python 2 ,
7672 BytesVerwenden Sie die Identität:
Wir haben:
Probieren Sie es online!
Dank Luis Mendo sparen Sie 4 Bytes.
quelle
APL (Dyalog) , 14 Bytes
Erfordert
⎕FR←1287
( 128 Bits F loating Punkt R ePresentation) für kleinen Eingang. Nimmtk
als richtiges Argument.Probieren Sie es online!
⍳
ganze Zahlen von eins bisk
(null wird nicht benötigt, da 0 = arctan 0)¯3+.○
Summe der Arcustangenten3○
Tangente1(
…)
Wende die folgende implizite Funktion mit 1 als linkem Argument und der obigen als rechtem Argument an:∧
das niedrigste gemeinsame Vielfache (von 1 und dem richtigen Argument); gibt den Zähler an÷
geteilt durch,
die Verkettung (von 1 und dem richtigen Argument); gibt den Zähler und den Nenner anquelle
Haskell , 52 Bytes
Dies verwendet die Erweiterung der OEIS-Serie:
Probieren Sie es online!
Oder eine pointfree Version:
quelle
JavaScript (ES6), 80 Byte
Gibt ein Paar [Zähler, Nenner] zurück. Erklärung:
f(n-1) = a/b
Dann lassf(n) = atan(tan(n)+tan(a/b)) = (n+a/b)/(1-n*a/b) = (b*n+a)/(b-n*a)
. Es bleibt dann, den Bruchteil auf den niedrigsten Stand zu bringen.Online ES6-Umgebung
quelle
Pari / GP , 36 Bytes
Probieren Sie es online!
Oder gleich lang:
Probieren Sie es online!
quelle
05AB1E ,
3326 BytesProbieren Sie es online!
Erläuterung
quelle
Oktave , 30 Bytes
Probieren Sie es online!
quelle
Casio-Basic, 35 Bytes
tan -1 sollte als das auf der Trig-Tastatur eingegeben werden; oder -1 kann getrennt von der Tastatur abc> Math eingegeben werden. Gemäß dem Handbuch des fx-CP400 handelt es sich um ein einzelnes Zwei-Byte-Zeichen (764).
Funktion, 34 Byte für den Code, +1 Byte zum Hinzufügen
k
als Argument.Erläuterung
seq(tan-1(n),n,0,k)
generiert alle Wertetan-1(n)
von 0 bis k.sum
Fügt sie alle zusammen undtan
übernimmt dann die Tangensfunktion für sie.tExpand
wird sie dann in eine einzige Fraktion verwandeln.quelle
⁻
und¹
sind jeweils zwei Bytes;E5CC
undE5C1
.Julia 0.6.0 40 Bytes
k->rationalize(tan(sum(x->atan(x),1:k)))
Es ist eine einfache Implementierung der Frage. Die Präzision des Rationalisierens kann manchmal komisch sein, funktioniert aber in 99% der Fälle einwandfrei.
quelle