Contexte
On peut montrer que pour tout entier k >= 0
, f(k) = tan(atan(0) + atan(1) + atan(2) + ... + atan(k))
est un nombre rationnel.
Objectif
Écrivez un programme ou une fonction complète qui, lorsqu'elle est donnée k >= 0
, sort f(k)
en une seule fraction réduite (le numérateur et le dénominateur sont des coprimes).
Cas de test
Les premières valeurs sont
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)
Règles
- Les failles standard sont interdites.
- L'entrée et la sortie peuvent être dans n'importe quel format pratique. Vous pouvez sortir
f(k)
comme une chaînenumerator/denominator
, comme un tuple de deux entiers, une fraction ou d'un objet rationnel, etc. Si vous émettez une chaîne, donnez seulement deux entiers, qui est, sortie au3/2
lieu de1 1/2
. - C'est le code-golf, la réponse la plus courte (en octets) l'emporte.
atan(0)
terme est inutile.Réponses:
M , 11 octets
Essayez-le en ligne!
Utilise la formule OEIS
x(n) = (x(n-1)+n)/(1-n*x(n-1))
avecx(0) = 0
.la source
Mathematica, 28 octets
Essayez-le en ligne!
Une approche plus longue mais plus intéressante (32 octets):
Essayez-le en ligne!
la source
o'_'o
Mathematica et seso'_'o
Python 2 ,
7672 octetsUtilisez l'identité:
Nous avons:
Essayez-le en ligne!
Merci à Luis Mendo, économisez 4 octets.
la source
APL (Dyalog) , 14 octets
Requiert
⎕FR←1287
( 128 bit F loating point R ePresentation) pour la petite entrée. Prendk
comme bon argument.Essayez-le en ligne!
⍳
entiers de un àk
zéro (zéro n'est pas nécessaire car 0 = arctan 0)¯3+.○
somme des tangentes d'arcus3○
tangente1(
…)
Appliquez la fonction tacite suivante avec 1 comme argument de gauche et ce qui précède comme argument de droite:∧
le plus petit commun multiple (de 1 et le bon argument); donne le numérateur÷
divisé par,
la concaténation (de 1 et le bon argument); donne le numérateur et le dénominateurla source
Haskell , 52 octets
Cela utilise l'extension de la série OEIS:
Essayez-le en ligne!
Ou une version sans point:
la source
JavaScript (ES6), 80 octets
Renvoie une paire [numérateur, dénominateur]. Explication:
f(n-1) = a/b
alors laissezf(n) = atan(tan(n)+tan(a/b)) = (n+a/b)/(1-n*a/b) = (b*n+a)/(b-n*a)
. Il reste alors à réduire la fraction à ses plus bas niveaux.Environnement ES6 en ligne
la source
Pari / GP , 36 octets
Essayez-le en ligne!
Ou la même longueur:
Essayez-le en ligne!
la source
05AB1E ,
3326 octetsEssayez-le en ligne!
Explication
la source
Octave , 30 octets
Essayez-le en ligne!
la source
Casio-Basic, 35 octets
tan -1 doit être entré comme celui du clavier Trig; ou le -1 peut être entré séparément du clavier abc> Math. Selon le manuel du fx-CP400, il s'agit d'un seul caractère à deux octets (764).
Fonction, 34 octets pour le code, +1 octet à ajouter
k
comme argument.Explication
seq(tan-1(n),n,0,k)
génère toutes les valeurstan-1(n)
de 0 à k.sum
les ajoute tous ensemble, puistan
fait la fonction tangente sur eux.tExpand
les transformera ensuite en une seule fraction.la source
⁻
et¹
sont deux octets chacun;E5CC
etE5C1
.Julia 0.6.0 40 octets
k->rationalize(tan(sum(x->atan(x),1:k)))
C'est une mise en œuvre simple de la question. La précision de la rationalisation peut parfois être étrange mais fonctionne très bien 99% du temps.
la source