계산하기 전에 계승이 얼마나 큰지 알 수 있습니까?
-
12-09-2019 - |
문제
GMP를 사용하여 매우 큰 계승을 계산합니다 (예 : 234234!). 계산을하기 전에 결과가 몇 자리 길이가 될 수있는 방법이 있습니까?
해결책
그만큼 계승의 로그 계승 번호가 취할 숫자 수를 계산하는 데 사용할 수 있습니다.
이것은 쉽게 알고리즘 형태로 번역 될 수 있습니다.
//Pseudo-code
function factorialDigits (n)
var result = 0;
for(i = 1; i<=n; i++)
result += log10(n);
return result;
다른 팁
당신은 변환 할 수 있습니다 스털링의 근사 간단한 로그 수학을 사용하는 공식을 사용하여 숫자 수를 얻습니다.
n! ~ sqr(2*pi*n) * (n/e)^n
log10(n!) ~ log10(2*pi*n)/2 + n*log10(n/e)
하드웨어 플로트 수학은 이것에 충분하기 때문에 번개가 빠릅니다.
스털링의 근사치는 n 크기의 근사치를 제공합니다!
참조 위키 백과 파생에 대한 페이지.
그럴 것입니다
nlog(n) - n + log(n(1 + 4n(1 + 2n)))/6 + log(pi)/2
주제 "성장률" @ 참조 http://en.wikipedia.org/wiki/factorialSrinivasa Ramanujan 방법
예, 참조하십시오 스털링 근사치
그것은 n이라고 말한다! ~ = sqrt (2*piN)(n/e)^n. 숫자 수를 얻으려면 1+log (n!)/log (10)를 가져갑니다.
약 4 명이 스털링을 언급 했으므로 ... 또 다른 옵션은 첫 번째 N 팩토리 노인 각각에 대한 숫자 수를 저장하는 LUT입니다. 정수의 4 바이트와 숫자 수에 대해 4 바이트를 가정하면 처음 1,000,000 개의 요인을 약 8MB에 저장할 수 있습니다.
제휴하지 않습니다 StackOverflow