本题与第325题的解法相似,以下代码改编自官方论坛,效率稍高一些,最终结果是$301450082318807027$。\\
注:因用到math.isqrt等函数,以下代码为Python 3。
from math import floor,sqrt,isqrt
from decimal import *
getcontext().prec = 20
def g(x,y):
if x <= 0 or y <= 0:
return 0
if x <= 1:
return g(x+1,y)-y*(y+1)//2
if x < 2:
return int(x*y)*(1+int(x*y))//2-g(x/(x-1),int((x-1)*y))
return g(x-int(x),y)+int(x)*y*(y+1)//2
m=2000000
n=10**9
r=0
k=1
a=floor(n/sqrt(k))
while a>m:
b=floor(n/sqrt(k+1))
u,v=Decimal(k).sqrt(),Decimal(k+1).sqrt()
r+=g(v,max(m,b))-g(v,m)+g(u,m)-g(u,a)+(a-max(m,b))*n
if isqrt(k+1)**2==k+1:
r+=int(m*sqrt(k+1))//isqrt(k+1)-n//isqrt(k+1)
if isqrt(k)**2==k:
r+=n//isqrt(k)-int(m*sqrt(k))//isqrt(k)
k+=2
a=floor(n/sqrt(k))
print(r)
|