0026. 倒数循环节一
* * * *
拉格朗日计划
* * * *
倒数循环节一

分子为1的分数称为单位分数。分母为2到10的单位分数的十进制表示如下:

\begin{align*} 1/2 &= 0.5 \\ 1/3 &= 0.(3) \\ 1/4 &= 0.25 \\ 1/5 &= 0.2 \\ 1/6 &= 0.1(6) \\ 1/7 &= 0.(142857) \\ 1/8 &= 0.125 \\ 1/9 &= 0.(1) \\ 1/10 &= 0.1 \\ \end{align*} 其中括号表示循环节。例如0.1(6)表示0.1666666...,其循环节的长度为1。可以看出1/7的循环节长度为6。

求所有分母小于1000的单位分数中循环节长度最大的单位分数的分母。

本题难度:



解答

对任意最简分数$a/b$(即$\gcd(a,b)=1$),显然当且仅当b具有$b=2^j5^k$的形式时它才能表示为有限小数。若$b=2^j5^kd$,其中d不能被2或5整除,则可以找到合适的$a_1,a_2$从而将$a/b$写作 $$\frac{a}{b}=\frac{a}{2^j5^kd}=\frac{a_1}{2^j5^k}+\frac{a_2}{d}$$ 其中等式右侧的第一项是有限小数。因此不失一般性地,只需考虑b不能被2或5整除的情况。

若$a/b$和$a'/b'$的循环节长度分别是c和c',则显然$(ab'+a'b)/(bb')=a/b+a'/b'$的循环节长度是$\mathrm{lcm}(c,c')$,因此通过将分母作质因数分解后拆分可以把问题进一步归约为考察b是素幂数的情况。

设d是循环节内的数字所代表的整数(即题中括号内的数字,例如142857),循环节的长度是k,则有 $$\frac{a}{b}=d(10^{-k}+10^{-2k}+\ldots)=d\times 10^{-k}\times \frac{1}{1-10^{-k}}=\frac{d}{10^k-1},$$ 即 $$a(10^k-1)=bd.$$ 由$\gcd(a,b)=1$可得b能整除$10^k-1$。至此已经可以通过以下程序求得结果$983$。对应循环节的长度是982。

此外,从上述分析还可以看出10在模b的乘法群中具有k阶,因此k能整除$\tau(b)$,其中$\tau$是欧拉totient函数。

d=[10**k-1 for k in range(1000)]

mc=0
mb=0

for b in range(3,1000):
    if b%2!=0 and b%5!=0:
        k=1
        while d[k]%b!=0:
            k+=1
        if k>mc:
            mc=k
            mb=b

print mb,mc