Qual é a probabilidade do dígito $k$ no número $x^n$
Bem, o título da pergunta diz tudo: como escrever um código que encontra a probabilidade do dígito $k$ no número $x^n$?
Por exemplo, quando $x=2$, $n=100$, e $k=7$ estamos tentando descobrir quantos $7$há no número $2^{100}$. Para encontrar a resposta que escrevi$2^{100}=1267650600228229401496703205376$ e contou o número de $7$s, e fez:
$$\frac{\text{number of}\space7\text{s}\space\text{in the number}\space2^{100}}{\text{number of digits}\space 2^{100}}=$$ $$\frac{3}{1+\lfloor\log_{10}\left(2^{100}\right)\rfloor}=\frac{3}{31}\approx0.0967742$$
Meus pensamentos sobre o código:
- O número de dígitos em um número $p$ pode ser encontrado usando
1+Floor[Log10[p]] - O r'ésimo dígito do número $p$ pode ser encontrado usando
IntegerDigits[p][[r]] - A fim de verificar uma tabela de números quanto à probabilidade, podemos usar
ParallelTable[If[TrueQ[], n, Nothing], {n, ,}]
Mas como combinar as ideias de cima, não sei.
Respostas
countK[x_, n_, k_] := (
digits = IntegerDigits[x^n];
Count[digits, k]/Length[digits]
)
countK[2, 100, 7]
digitFrequency = NProbability[x == #3,
Distributed[x, EmpiricalDistribution @ IntegerDigits[#^#2]]] &;
digitFrequency[2, 100, 7]
0.0967742
digitFrequency2 = N @(AssociationThread @@ Transpose@Tally @ # / Length @ # & @
IntegerDigits[#^#2]) @ #3 /. _Missing -> 0 &;
digitFrequency2[2, 100, 7]
0.0967742
digitFrequency3 = N @ (Divide @@ Through[{Counts, Length}@
IntegerDigits [#^#2]]) @ #3 /. _Missing -> 0 &;
digitFrequency3[2, 100, 7]
0.0967742
probs=DigitCount[#]/IntegerLength[#] &;
Usar:
probs[2^100]
{2 / 31,6 / 31,2 / 31,2 / 31,2 / 31,5 / 31,3 / 31,1 / 31,2 / 31,6 / 31}
As probabilidades dos dígitos 1, 2, ..., 9, 0