Factorials exhibit an interesting trait. The minimum value needed for the length of x! to reach nx, where n is a positive integer, forms an interesting sequence. Let len(x!) = int(log(x!))+1 to account for the extra digit.
What is the relationship between len(x!) and x?
What is the smallest number such that the len(x!)>=8x?
How can I approximate when len(x!) first exceeds/equals nx?
As a good approximation to the log(x!) --common log-- I use
log(x) * (x + .5) + (-x + 1/(12*x) - 1/(360*x^3) + 1/(1260*x^5)) / ln(10) + log(2*pi)/2
based on a formula for the Gamma function of x (as x! = Gamma(x+1)), found in the 11th edition Encyclopaedia Britannica:
Gamma(x) = ((x^x) / sqrt(x)) * e^-x * sqrt(2*pi) * e^(B1/(1*2*x) - B2/(3*4*x^3) + B3/(5*6*x^5) - ... )
where the B#'s are Bernoulli numbers: B1 = 1/6, B2 = 1/30, B3 = 1/42, ...
I used the following program to increase x geometrically until the desired length (1 more than the integer part, or characteristic, of the common log of the factorial) was exceeded, then decrease until it was not reached, by factors closer and closer to 1 until a number is settled on. Then lengths were evaluated from 20 before to 20 after the converged value.
DECLARE FUNCTION log10# (x#)
DECLARE FUNCTION lxf# (x#)
CONST pi# = 3.14159265358979# + 3.24D-15
CONST twopi# = 2# * pi#
CONST e# = 2.71828182845904# + 5.24D-15
CONST loge10# = 2.30258509299404# + 5.68D-15
CONST einv# = 1# / e#
CONST radDeg# = 180# / pi#
CLS
DEFDBL A-Z
CLS
FOR i = 1 TO 40: PRINT i, INT(lxf#(i)) + 1: NEXT
PRINT
f = 1.1
DO
DO
i = INT(i * f)
l = INT(lxf#(i) + 1)
a$ = INKEY$
LOOP UNTIL l >= 8 * i OR a$ = CHR$(27)
IF a$ = CHR$(27) THEN EXIT DO
PRINT i, l, l / i
f = 1 - (f - 1) / 2
DO
i = INT(i * f)
l = INT(lxf#(i) + 1)
a$ = INKEY$
LOOP UNTIL l < 8 * i OR a$ = CHR$(27)
IF a$ = CHR$(27) THEN EXIT DO
f = 1 + ABS(f - 1) / 2
PRINT i, l, l / i
LOOP UNTIL INKEY$ = CHR$(27) OR a$ = CHR$(27)
j = i
FOR i = j - 20 TO j + 20
l = INT(lxf#(i) + 1)
PRINT i, l, l / i
NEXT
DEFINT A-Z
END
DEFDBL A-Z
FUNCTION log10# (x)
log10# = LOG(x) / loge10#
END FUNCTION
FUNCTION lxf# (x#)
IF x# < 171 THEN
fact# = 1
IF x# > 1 THEN
FOR i = 2 TO x#
fact# = fact# * i
NEXT
END IF
lo# = log10#(fact#)
ELSE
lo# = log10#(x#) * (x# + .5#)
lo# = lo# + (-x# + 1# / (12# * x#) - 1# / (360# * x# * x# * x#) + 1# / (1260# * x# * x# * x# * x# * x#)) / loge10#
lo# = lo# + log10#(twopi#) / 2#
END IF
lxf# = lo#
END FUNCTION
The convergence went:
x len(x!) len(x!) / x
294108723 2362932255 8.034213439497339
265433115 2120720512 7.989660642003919
272068944 2176656165 8.000384509155886
268668081 2147980247 7.994921611101246
272036926 2176386104 8.000333395915524
271186810 2169216269 7.99897409833465
272034930 2176369268 8.000330207595033
271822402 2174576711 7.999990784424015
271928582 2175472272 8.000160395055493
271822369 2174576432 7.9999907292398
271848914 2174800321 8.000033139731432
271822366 2174576407 7.999990725560824
271829002 2174632377 8.000001328040781
271825683 2174604383 7.999996023186669
271829001 2174632368 8.000001324362001
271827341 2174618368 7.99999867562991
271828583 2174628843 8.000000658503231
271828167 2174625334 7.999999992642411
271828270 2174626203 8.00000015818811
271828166 2174625326 7.999999992642411
271828191 2174625537 8.000000033109149
271828165 2174625317 7.999999988963616
271828171 2174625368 8
271828167 2174625334 7.999999992642411
271828170 2174625360 8
271828169 2174625351 7.999999996321206
indicating 271828170 is the first where the quotient is exactly 8. The span of values shows:
271828149 2174625182 7.999999963212051
271828150 2174625191 7.999999966890846
271828151 2174625199 7.999999966890846
271828152 2174625208 7.999999970569641
271828153 2174625216 7.999999970569641
271828154 2174625225 7.999999974248436
271828155 2174625233 7.999999974248436
271828156 2174625241 7.999999974248436
271828157 2174625250 7.999999977927231
271828158 2174625258 7.999999977927231
271828159 2174625267 7.999999981606027
271828160 2174625275 7.999999981606027
271828161 2174625284 7.999999985284822
271828162 2174625292 7.999999985284822
271828163 2174625300 7.999999985284822
271828164 2174625309 7.999999988963616
271828165 2174625317 7.999999988963616
271828166 2174625326 7.999999992642411
271828167 2174625334 7.999999992642411
271828168 2174625343 7.999999996321205
271828169 2174625351 7.999999996321206
271828170 2174625360 8
271828171 2174625368 8
271828172 2174625376 8
271828173 2174625385 8.000000003678794
271828174 2174625393 8.000000003678794
271828175 2174625402 8.000000007357588
271828176 2174625410 8.000000007357588
271828177 2174625419 8.000000011036384
271828178 2174625427 8.000000011036384
271828179 2174625435 8.000000011036384
271828180 2174625444 8.000000014715178
271828181 2174625452 8.000000014715178
271828182 2174625461 8.000000018393973
271828183 2174625469 8.000000018393973
271828184 2174625478 8.000000022072767
271828185 2174625486 8.000000022072767
271828186 2174625494 8.000000022072767
271828187 2174625503 8.000000025751561
271828188 2174625511 8.000000025751561
271828189 2174625520 8.000000029430355
where three values show exactly 8 and then increasing values.
The interesting thing about 271828170, is its closely following the digits of e. It is 12 or 13 short of mimicking or approximating the first 8 digits (or rounded digits) of e.
The values of x, len(x!) and len(x!) / x where the length is an integral multiple of the base number, up to 10 are shown (except for len(1!)/1 = 1):
22 22 1
23 23 1
24 24 1
266 532 2
267 534 2
268 536 2
2712 8136 3
2713 8139 3
27175 108700 4
27176 108704 4
271819 1359095 5
271820 1359100 5
271821 1359105 5
2718272 16309632 6
2718273 16309638 6
27182807 190279649 7
27182808 190279656 7
271828170 2174625360 8
271828171 2174625368 8
271828172 2174625376 8
2718281815 24464536335 9
2718281816 24464536344 9
27182818270 271828182700 10
27182818271 271828182710 10
BTW 27182818270! is about 1.9 x 10^271828182699 and 27182818271! is about 5.2 x 10^271828182709.
|
Posted by Charlie
on 2006-03-02 11:19:50 |