问题描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
有一个不超过 10e17 的正整数 n,知道这个数除以 2 至 49 后的余数如下表所示,求这个正整数最小是多少。
运行限制
- 最大运行时间:1s
- 最大运行内存: 512M
扩展中国剩余的板子题,一是自己没用过python写exgcd,也不是很明确python在除法过程中的隐藏的类型转换,最重要的是一个模数写错了,导致一直不对(sb厕所杯!)。
上代码:
p,q=0,0
def exgcd(a,b):
global p,q
if (b==0):
p,q=1,0
return a
gcd=exgcd(b,a%b)
mid=p
p=q
q=mid-a//b*p
return gcd
m=[i for i in range(2,50)]
r=[1,2,1,4,5,4,1,2,9,0,5,10,11,14,9,0,11,18,9,11,11,15,17,9,23,20,25,16,29,27,25,11,17,4,29,22,37,23,9,1,11,11,33,29,15,5,41,46]
m1,r1=m[0],r[0]
for i in range(1,48):
m2,r2=m[i],r[i]
gcd=exgcd(m1,m2)
if ((r2-r1)%gcd!=0):
print(1)
continue
p=p*(r2-r1)//gcd
p=((p%(m2//gcd)+(m2//gcd))%(m2//gcd))
r1=r1+m1*p
m1=m1*m2//gcd
print(((r1%m1)+m1)%m1)
通过情况: