Étant donné un nombre entier positif n, la somme des n premiers chiffres décimaux de la partie fractionnaire de π n .
Exemple d'entrées et sorties:
1 → 1
2 → 14
3 → 6
4 → 13
5 → 24
50 → 211
500 → 2305
5000 → 22852
Les fonctions intégrées calculant des chiffres de π ou évaluant des séries de puissance ou des fractions continues ne sont pas autorisées. Des échappatoires standard s'appliquent. L'entrée / sortie peut être dans un format pratique (stdin, stdout, fonction entrée / sortie, etc.).
code-golf
math
arithmetic
pi
orlp
la source
la source
Réponses:
Python - 191 octets
~ Version 4x plus rapide - 206 octets
L'entrée provient de stdin. La sortie pour n = 5000 prend environ 14 secondes avec le deuxième script (ou 60 secondes avec le premier).
Exemple d'utilisation:
La formule utilisée est la suivante:
où A n est le n ème numéro alternatif , qui peut être formellement défini comme le nombre de permutations alternées sur un ensemble de taille n (voir aussi: A000111 ). Alternativement, la séquence peut être définie comme la composition des nombres tangents et des nombres sécants ( A 2n = S n , A 2n + 1 = T n ), plus à ce sujet plus tard.
Le petit facteur de correction c n converge rapidement vers 1 lorsque n devient grand et est donné par:
Pour n = 1 , cela revient à évaluer la série Leibniz . Approximativement π à 10 ½ , le nombre de termes requis peut être calculé comme suit:
qui converge (arrondi vers le haut) à 17 , bien que des valeurs plus petites de n nécessitent beaucoup plus.
Pour le calcul de A n, il existe plusieurs algorithmes, et même une formule explicite, mais tous sont quadratiques par n . J'ai codé à l'origine une implémentation de l'algorithme de Seidel , mais elle s'avère trop lente pour être pratique. Chaque itération nécessite un terme supplémentaire pour être stocké, et les termes augmentent très rapidement en amplitude (le "mauvais" type d' O (n 2 ) ).
Le premier script utilise une implémentation d'un algorithme initialement donné par Knuth et Buckholtz :
Bien qu'il ne soit pas explicitement indiqué, cet algorithme calcule simultanément les nombres tangents et les nombres sécants. Le deuxième script utilise une variation de cet algorithme de Brent et Zimmermann , qui calcule T ou S , selon la parité de n . L'amélioration est quadratique de n / 2 , d'où l'amélioration de la vitesse ~ 4x.
la source
Python 2, 246 octets
J'ai adopté une approche similaire à ma réponse à Calculer π avec convergence quadratique . La dernière ligne prend la Nième puissance de pi et additionne les chiffres. Le test N = 5000 prend environ une minute.
Quelques tests:
Le code non golfé:
la source
a=j
etp=j
àa=p=j
IIRC. Peut être.Pyth, 33
Basé sur cette réponse de isaacg . Pourrait probablement être plus joué au golf. Lent.
la source