PETRUS ROMANUS

CONTAGEM DE DECIMAIS EM RAÍZES QUADRADAS

O código abaixo serve para explorar o mundo dos irracionais: ele calcula raízes quadradas não-exatas com quantas casas decimais quisermos e depois exibe quantas vezes cada algarismo (0, 1, 2, 3, 4, 5, 6, 7, 8 e 9) apareceu.
from decimal import Decimal, getcontext
raiz = int(input('Raiz de: '))
digitos = int(input('Dígitos: '))
exibir = str(input('Exibir número (s/n)? '))
getcontext().prec = digitos
numero = str(Decimal(raiz).sqrt())
if (exibir == "s"):
print('\n%s\n' %(numero))
else:
print('')
for i in range (0, 10):
print('%i: %i (%.2f%%)' %(i, numero.count(str(i)), numero.count(str(i))*100/digitos))
while True:
sequencia = str(input('\nSequência: '))
print(numero.count(sequencia))
if (sequencia == "sair"):
break
Exemplos de funcionamento:

Raiz quadrada de 2 com 500 dígitos. Observe que apareceram 54 zeros, 45 uns, 49 dois e assim por diante.
Também coloquei uma opção para identificar sequências numéricas dentro da raiz. Veja:

A sequência "1234" apareceu 4 vezes dentro da raiz quadrada de 5 com 25 mil casas decimais
Além disso, criei outro código para exibir no formato de gráfico algumas dessas informações. O código é o seguinte:
from decimal import Decimal, getcontext
import matplotlib.pyplot as plt
eixo_x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
eixo_y = []
raiz = 2
getcontext().prec = 250
numero = str(Decimal(raiz).sqrt())
for i in range (0, 10):
eixo_y.append(numero.count(str(i)))
plt.rcParams['font.size'] = '16'
plt.title('Distribuição de Decimais em Raízes')
plt.xlabel('Algarismos')
plt.ylabel('N° de vezes que aparecem')
plt.bar(eixo_x, eixo_y)
for i in range (0, 10):
plt.text(i, eixo_y[i], eixo_y[i], ha = 'center')
plt.show()

O código acima sendo executado gera esse gráfico, isto é, a distribuição de algarismos dentro da raiz quadrada de 2 com 250 casas decimais
Gráficos desse tipo, em situações como essa, são úteis para verificar tendências. Observe que, acima, a altura das barras não estão muito niveladas. Não obstante, observe o que ocorre quando colocamos 50 mil casas decimais:

Com 50 mil casas decimais, as barras estão quase da mesma altura. Pela Lei dos Grandes Números, isso nos mostra que a distribuição de algarismos em raízes quadradas é aleatória. Com os códigos dessa página, é possível realizar mais experiências dessas em Python