Распределение цифр в волшебных числах N!
termometr — 26.11.2016 Написал программку на Вольфраме по проверке гипотезы равномерности распределения заданной цифры в дроби. Если не лоханулся в коде, то не такой я уж и дурак.In[1720]:= (* Извлечение нужного знака из числа и - Распределение цифр в волшебных
числах N! *) ;
ClearAll[ "Global`*" ] (* стартовая зачистка всех переменных *)
Fun41[x_, ns_] := RealDigits[x, 10, 1, -ns][[1, 1]] (*Извлечение нужного знака из числа - The best*)
FRound[x_, ns_] := Round[x*10^ns]/10^ns
Ns = 3; (* позиция цифры в числе *)
"=========================";
{ A = RandomReal[], RealDigits[A] ,
RealDigits[A, 10, 1, -Ns] } ; (* тест *)
"=========================";
N1 = 6; (* аргумент факториала *)
{ N1, Nmax = Factorial[N1] , PrimeQ[Nmax], Nmax1 = (Nmax - 1) ,
PrimeQ[Nmax1] }
NmaxX = Nmax + 1 ; (* тестируемый знаменатель *)
" C округлением "
NN = 0 ;
P10 = Table[0, {i, 10}] ;
Do[{NN = NN + 1, Pr = FRound[NN/NmaxX, Ns] (* Pr=FRound[NN/NmaxX,
Ns] , Pr=NN/NmaxX *), Dgt = Fun41[Pr, Ns],
Do[ P10[[n + 1]] = P10[[n + 1]] + If[Dgt == n, 1, 0], {n, 0, 9,
1}] }, {m, 1, NmaxX, 1}]
P11 = P10/NmaxX
N[P11, 3]
{NmaxX, NmaxX == NN, NmaxX == Sum[P10[[i]], {i, 10}] }
NmaxX = Nmax ; (* тестируемый знаменатель *)
" C округлением "
NN = 0 ;
P10 = Table[0, {i, 10}] ;
Do[{NN = NN + 1, Pr = FRound[NN/NmaxX, Ns] , Dgt = Fun41[Pr, Ns],
Do[ P10[[n + 1]] = P10[[n + 1]] + If[Dgt == n, 1, 0], {n, 0, 9,
1}] }, {m, 1, NmaxX, 1}]
P11 = P10/NmaxX
N[P11, 3]
{NmaxX, NmaxX == NN, NmaxX == Sum[P10[[i]], {i, 10}] }
" Без округления "
NN = 0 ;
P10 = Table[0, {i, 10}] ;
Do[{NN = NN + 1, Pr = NN/NmaxX , Dgt = Fun41[Pr, Ns],
Do[ P10[[n + 1]] = P10[[n + 1]] + If[Dgt == n, 1, 0], {n, 0, 9,
1}] }, {m, 1, NmaxX, 1}]
P11 = P10/NmaxX
N[P11, 3]
{NmaxX, NmaxX == NN, NmaxX == Sum[P10[[i]], {i, 10}] }
"EOF";
Out[1728]= {6, 720, False, 719, True}
Out[1729]= " C округлением "
Out[1733]= {73/721, 72/721, 72/721, 72/721, 72/721, 72/721, 72/721, \
72/721, 72/721, 72/721}
Out[1734]= {0.101, 0.0999, 0.0999, 0.0999, 0.0999, 0.0999, 0.0999, \
0.0999, 0.0999, 0.0999}
Out[1735]= {721, True, True}
Out[1736]= " C округлением "
Out[1740]= {1/12, 1/9, 1/9, 1/12, 1/9, 1/12, 1/9, 1/12, 1/9, 1/9}
Out[1741]= {0.0833, 0.111, 0.111, 0.0833, 0.111, 0.0833, 0.111, \
0.0833, 0.111, 0.111}
Out[1742]= {720, True, True}
Out[1743]= " Без округления "
Out[1747]= {1/9, 1/9, 1/12, 1/9, 1/12, 1/9, 1/9, 1/12, 1/9, 1/12}
Out[1748]= {0.111, 0.111, 0.0833, 0.111, 0.0833, 0.111, 0.111, \
0.0833, 0.111, 0.0833}
Out[1749]= {720, True, True}
|
</> |