вычисление количества цифр в числе n! (факториал)
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [18.97.9.174] |
|
|
правила раздела Алгоритмы

вычисление количества цифр в числе n! (факториал)
|
Сообщ.
#1
,
|
|
|
|
может кто знает?!
|
|
Сообщ.
#2
,
|
|
|
|
Каких цифр, в полученном числе что-ли! или как? ???
|
|
Сообщ.
#3
,
|
|
|
|
формула Стирлинга
n!~(n/e)^n*Sqrt(2*Pi*n)*(1+1/12n+1/288n^2...) взяв десятичный логарифм, получим порядок числа, т.е. число цифр |
|
Сообщ.
#4
,
|
|
|
|
ну это только в том случае, если у тебя это число в какой-нибудь стандартный тип влезет, а если нет?
|
|
Сообщ.
#5
,
|
|
|
|
сразу надо логарифм брать, тогда влезет
Lg(n!)=n*Lg(n/e)+1/2*Lg(2*Pi*N) пример для n=10 получается ~6.56, т.е 7 знаков (6 порядок->10^6=1 000 000) 3 628 800 |
|
Сообщ.
#6
,
|
|
|
|
Что-то не работает эта формула ... разве что ... N и n - это одно и то же?
|
|
Сообщ.
#7
,
|
|
|
|
>разве что ... N и n - это одно и то же?
Да, одно и то же. |
|
Сообщ.
#9
,
|
|
|
|
Ой, а зачем прикрутили еще приближенные вычисления по формуле Стирлинга?
Используем факт, что lg(n!) = lg(1*2*3*....*n) = lg(1) + lg(2) + ... + lg(n) ![]() ![]() Const N = 1000000; Function Lg(X : Extended) : Extended; Begin Lg:=Ln(X) / Ln(10); End; Var I : Longint; Sum : Extended; Begin Sum:=0.0; For I:=1 To N Do Sum:=Sum + Lg(I); Writeln(N, '! = ', Exp(Frac(Sum) * Ln(10)):10:10, '... * 10^', Trunc(Sum)); End. |