- 注册时间
- 2007-12-28
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 12787
- 在线时间
- 小时
|
发表于 2019-12-22 21:00:15
|
显示全部楼层
说说我的思路和算法,或者对114#的解读,如有不对,请指正。
对于一个实数x,为了方便起见,我们总是假定 $0<x<1$
如果x恰好能表示为$p/q$(p,q是整数,p与q互质)的形式,当n从1,2,3,
依次递增时,nx的小数部分呈现周期性,其周期为q的整数倍。q称为最小周期。
但对于不能表示为$p/q$形式的实数x,nx的小数部分不会呈现周期性。
但粗略的看,nx的分布仍然大体呈现周期性,$1/x$可称为最小周期。
由于周期不能为小数,我们定义 $p1=\lfloor 1/x \rfloor$, $p2= \ceil {1/x} $,
分别称之为最小欠周期和最小过周期。$n*p1$,可表示为一个整数加一个略小于0的数的和,
而$n*p2$可表示为一个整数加一个略大于0的数的和。如对于无理数$x=\lg(2)$,
$3x \approx 1+(-0.1)$
$4x \approx1+(0.2)$
进一步,使用连分数法,可求得x的的一系列渐进分数,如某个渐进分数$p/q>x$时,
q可称为x的欠周期,如某个渐进分数p/q<x时,q可称为x的过周期。例如$\lg(2)$的
渐进分数依次为$1/3$,$3/10$,$28/93$,$59/196$,$146/485$,$643/2136$.
$\lg(2)$乘以这些分数的分母,其值依次为
$\lg(2)*3 \approx 1 - 0.0969100$,3为欠周期
$\lg(2)*10 \approx 3 + 0.0102999$, 10为过周期
$\lg(2)*93 \approx 28 - 0.0042104$, 93为欠周期
$\lg(2)*196 \approx 59 + 0.0018791$, 196为过周期
$\lg(2)*485 \approx 146- 0.0004521$, 485为欠周期
$\lg(2)*2136 \approx 643+ 0.0000707$, 2136为过周期
指数形式
$2^3 = (1-0.2)*10^1$, 3为欠周期
$2^{10} = (1+0.024)*10^3$, 10为过周期
$2^{93} \approx (1-0.01) * 10^{28}$, 93为欠周期
$2^{196} \approx (1+0.004) * 10^{59}$, 196为过周期
$2^{485} \approx (1-0.0011) * 10^{146}$, 485为欠周期
$2^{2136}\approx (1+0.00016) * 10^{643}$,2136为过周期
类似的,若$\lg(n!)$的小数部分非常接近于$\lg(pi)$, 当n很大时,
$\lg((n+d)!) \approx \lg(n!) + d*\lg(n)$,我们求得$\lg(n)$的斩近分数$p/q$,
q为$\ln(n)$的欠周期或者过周期,则,$\ln((n+q)!)$的小数部分会非常接近于$\lg(n!)$。
利用这一思路,若$n!$的10进制表示的前几位数字略小于$pi$,则我们不需要逐个检查
$(n+1)!$,$(n+2)!$,而只检查$(n+q)!$, q为$\lg(n)$的渐进分数的分母,大大降低了工作量。
上面假定,$\lg((n+d)!) \approx \lg(n!) * d*\lg(n)$,在实际计算过程中,我们需要做更精确的估计
$\lg((n+d)!) = \lg(n!) + d*\lg(n)+ \lg(1+1/n) + \lg(1+2/n) + ... \lg(1+d/n)$
$= \lg(n!) + d* \lg(n)+ ( \ln(1+1/n) + \ln(1+2/n) + ... \ln(1+d/n) )/ln(10) $
$= \lg(n!) + d* \lg(n)+ ( 1/n + 2/n + ... + d/n)/\ln(10) - 0.5/\ln(10) ( (1^2)/(n^2) +(2^2)/(n^2) + ... (d^2)/(n^2) ) + ... $
$= \lg(n!) + d*\lg(n)+ \frac{d(d+1)}{2n*\ln(10)} - 0.5/\ln(10) ( {1^2}/{n^2} +{2^2}/{n^2} + ... {d^2}/{n^2} ) + ... $
$=> \lg(n!) + d*\lg(n)+ \frac{d(d+1)}{2n*\ln(10)} > \lg(n+d)! $
问题描述
1. 已知 $\lg(n!)$的小数部分略小于$\lg(\pi)$
2. 求d, $\lg (n+d)!$的小数部分同样略小于$\lg(\pi)$, 并且对于 $n <i < n+d$, 不存在$\lg((n+d)!) < \lg(i) < \lg(\pi)$
步骤
1. 求得$b=\lg(n!)$和$x=\lg(n)$
2. 求得x的渐进分数序列,多个,具体计算多少个,根据需要做出限制。
3. 对每一个渐进分数$p/q$, 求 $y= b + q*lg(n)+ \frac{q(q+1)}{2n*ln(10)}$,由上面的分析,
y总是大于$\lg (n+q)! $, 若y的小数部分小于$\lg(\pi)$, 则$\lg (n+q)!$的小数部分一定小于$\lg(\pi)$
对于每个q,求得一个y,在所有的y中,若q为d时,对应的y的小数部分取到最大,d即为答案。
4. 取n为n+d, 检查$\lg(n!)$的小数部分是否充分接近$\lg(\pi)$,并继续下一次迭代。 |
|