Qual é a probabilidade do dígito $k$ no número $x^n$

Oct 26 2020

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

2 Jean-Pierre Oct 26 2020 at 22:33
countK[x_, n_, k_] := (
  digits = IntegerDigits[x^n];
  Count[digits, k]/Length[digits]
  )
countK[2, 100, 7]
1 kglr Oct 26 2020 at 22:45
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
1 ciao Oct 27 2020 at 00:23
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