求f(2010)的正整数除数个数:小数位数与函数f(n)问题
让我们一步步拆解这个问题,把核心逻辑理清楚:
第一步:先明确1/k是有限小数的条件
题目里说1/k的小数部分恰好有n位——这意味着1/k必须是有限小数(无限小数的小数部分是无限长的,不可能“恰好n位”)。而一个分数是有限小数的充要条件是:分母k的质因数只能是2和5,也就是k可以写成 k=2^a * 5^b,其中a、b是非负整数(比如k=2就是21*50,k=5就是20*51)。
第二步:搞懂“小数部分恰好有n位”的等价条件
当k=2a*5b时,1/k的小数位数怎么确定?我们可以把分母凑成10的幂次来看:
- 如果a ≥ b,那么1/k = 5(a-b)/10a,这个分数的分子只有质因数5,不被2整除,所以写成小数后末尾不会有0,小数位数就是a;
- 如果b ≥ a,那么1/k = 2(b-a)/10b,分子只有质因数2,不被5整除,小数末尾同样无0,位数就是b。
总结一下:1/k的小数部分恰好有n位,等价于max(a,b)=n(a和b中较大的那个等于n)——因为这样才能保证小数位数是n,且末尾没有0(不会被约成更少位数的小数)。
第三步:找到满足条件的最小k
现在我们要找所有满足max(a,b)=n的k=2a*5b里最小的那个,分两种情况看:
- 当a=n时,b可以取0到n,对应的k=2n*5b。显然b越小k越小,最小的情况是b=0,此时k=2^n;
- 当b=n时,a可以取0到n,对应的k=2a*5n。a越小k越小,最小的情况是a=0,此时k=5^n。
因为2<5,所以对任意正整数n,2n肯定比5n小。而且其他满足条件的k(比如a=n,b≥1或者b=n,a≥1)都比2n大(比如2n*51=5*2n,明显大于2n)。所以满足条件的最小k就是2n,也就是f(n)=2^n。
第四步:计算f(2010)的正除数个数
f(2010)=22010,这是一个质数的幂次。根据数论里的除数个数公式:如果一个数的质因数分解是`p^e`(p是质数,e是正整数),那么它的正除数个数是`e+1`——因为除数可以是p0、p1、……、pe,一共e+1个。
这里2是质数,e=2010,所以f(2010)的正除数个数就是2010+1=2011。
内容的提问来源于stack exchange,提问作者A Piercing Arrow




