|
发表于 2020-5-26 00:14:08
|
显示全部楼层
难度评级:中等偏上
要素分析:数论
代码:- def S(a,b,which=0):#which这个参数是我对于题目理解在一点细节处理上的的分歧。
- e = 2.71828459
- def gcb(c,d):#辗转相除法
- while d:c,d = d,c%d
- return c
- def m(n):
- l = int(n/e)
- r = l + 1
- k = l if (n/l)**l > (n/r)**r else r
- k1 = k/gcd(n,k)
- while (g:=k1/5)==int(g):k1=g
- while (g:=k1/2)==int(g):k1=g
- lim = int(k1 == 1)+5
- return (k,lim)
- def f(k,n,l):
- m = 10**l
- u = k
- for i in range(n):
- down = k
- uns = 1
- while u:#楼主提示的快速幂取模
- if u&1:uns = (uns*d)%m
- down = (down**2)%m
- u >>= 1
- u = uns
- return u
- def d(n):
- k,lim = m(n)
- get = f(k,n,lim+1)
- if which and lim-5:get*=-1
- elif not which:
- l = 10**lim
- if lim&1:get*=(-1**int(bool(get%l)))
- return get
- res = 0
- for n in range(a,b+1):
- res += d(n)
- return res
复制代码
备注:which 参数是一个 bool 值,为命题 {m(n)为有限小数时,d(n)取值一定为负} 的真假性。
我理解的分歧是
意思是 d(n)=[ -f(k,n) ] 的最后 7 位
还是 d(n)=- [f(k,n) 的最后 7 位 ]
例:若 f(k,n) = 123456789 ,则
3456789 = [-123456789] 的最后七位
-3456789 =- [123456789 的最后 7 位 ] |
|