注意到只要不发生约分,那么分子分母之和就不变,其初值为$k+1$。
此时,分子不断增大,分母不断减小,因此第一次约分发生在分子首次达到$k+1$的最小素因子时。
重复上述过程即得$f(k)=p-1$,其中$p$是$k+1$的最大素因子。
记$p_k$为$k^3+1$最大素因子,则$f(k^3)=p_k-1$。
由$k^3+1=(k+1)(k^2-k+1)$知$p_k$或者是$k+1$的最大素因子,或者是$k^2-k+1$的最大素因子。
用筛法求出$p_k$再汇总即可,其中对$k^2-k+1$应用筛法的情形与第216题的解法类似。
最终结果是$269533451410884183$。
target=2000000
d1=[0]*(target+2)
d2=[0]*(target+2)
for i in range(2,target+2):
if d1[i]==0:
for j in range(i,target+2,i):
d1[j]=i
b=[i*i-i+1 for i in range(target+1)]
for i in range(2,target+1):
p=b[i]
if p>1:
for j in range(i,target+1,p):
while b[j]%p==0:
b[j]/=p
d2[j]=max(d2[j],p)
for j in range(p-i+1,target+1,p):
while b[j]%p==0:
b[j]/=p
d2[j]=max(d2[j],p)
print sum(max(d1[i+1],d2[i])-1 for i in range(1,target+1))
|