Dado um número inteiro positivo n, a soma dos primeiros n dígitos decimais da parte fracionária de π n .
Exemplo de entradas e saídas:
1 → 1
2 → 14
3 → 6
4 → 13
5 → 24
50 → 211
500 → 2305
5000 → 22852
Funções internas que calculam dígitos de π ou avaliam séries de potência ou frações contínuas não são permitidas. Aplicam-se brechas padrão . A entrada / saída pode estar em um formato conveniente (stdin, stdout, função de entrada / saída, etc.).
code-golf
math
arithmetic
pi
orlp
fonte
fonte
Respostas:
Python - 191 bytes
~ Versão 4x mais rápida - 206 bytes
A entrada é retirada do stdin. A saída para n = 5000 leva aproximadamente 14s com o segundo script (ou 60s com o primeiro).
Uso da amostra:
A fórmula usada é a seguinte:
onde A n é o n th alternada número , que pode ser formalmente definida como o número de permutações alternada com um conjunto de tamanho N (ver também: A000111 ). Alternativamente, a sequência pode ser definida como a composição dos Números Tangentes e Secantes ( A 2n = S n , A 2n + 1 = T n ), mais sobre isso mais tarde.
O pequeno fator de correção c n converge rapidamente para 1 quando n se torna grande e é dado por:
Para n = 1 , isso equivale a avaliar a série Leibniz . Aproximando π como 10 ½ , o número de termos necessários pode ser calculado como:
que converge (arredondado) para 17 , embora valores menores de n exijam consideravelmente mais.
Para o cálculo de A n existem vários algoritmos e até uma fórmula explícita, mas todos eles são quadráticos por n . Eu originalmente codifiquei uma implementação do Algoritmo de Seidel , mas ela se torna muito lenta para ser prática. Cada iteração requer que um termo adicional seja armazenado, e os termos aumentam em magnitude muito rapidamente (o tipo "errado" de O (n 2 ) ).
O primeiro script usa uma implementação de um algoritmo originalmente dado por Knuth e Buckholtz :
Embora não esteja explicitamente declarado, esse algoritmo calcula os números tangentes e secantes simultaneamente. O segundo script usa uma variação desse algoritmo de Brent e Zimmermann , que calcula T ou S , dependendo da paridade de n . A melhoria é quadrática em n / 2 , daí a melhoria da velocidade em ~ 4x.
fonte
Python 2, 246 bytes
Adotei uma abordagem semelhante à minha resposta em Calcular π com convergência quadrática . A última linha toma a enésima potência de pi e soma os dígitos. O teste N = 5000 leva cerca de um minuto.
Alguns testes:
O código não destruído:
fonte
a=j
ep=j
paraa=p=j
IIRC. Talvez.Pyth, 33
Com base nesta resposta por isaacg . Provavelmente poderia ser jogado mais. Lento.
fonte