2 条题解
-
3
解题思路
我们是直接枚举答案。假设有,那么一定满足,同时还要满足。
我们的一开始的取值就要比和都要大。
然后,我们要满足,我们只用关心除以的余数是多少,可以发现除以的余数没有改变,不会影响余数。同理也不会影响余数。因此,我们从将和同时减去和的最小公倍数,也不会改变余数,,因此我们只需要考虑和在以内的数就可以了。因为如果大于的话,那么我们就减去,并不会影响余数。因为和的值在以内,所以最小公倍数在以内。又因为和最大是,因此枚举到就可以了。
AC代码如下:
还可以用扩展欧几里得。由,得到。如果,才有解。先让取到最小正整数,然后通过式子求得,当,那么和同时加上对应的值。
AC代码如下:
-
1
col1 col2 col3 变换:px-qy=b-a 令-y=h px1+qy1=b-a 对应整数对(x1,y1) 由扩展欧几里得,得 px2+qy2=gcd(p,q) 对应整数对(x2,y2) 且 x1,y1为整数 所以 如果 b-a=k*gcd(p,q) 保证可以有解 这是充分不必要的 那么怎么证明必要性呢 我们知道如果这个方程成立 还有一种情况即 gcd(p,q)*k+dx*p-dy*q
但是我们在求解gcd(p,q)的时候,如果采用二进制会在递推中产生迭代 return gcd(a-b,b)
那么只有迭代次数足够多 我们总是有 gcd(a,b)->gcd(a-b,b)->gcd(dx*a-dy *b,b) (这里可以说是应用了一下更相减损) 于是我们所求得的,一定是最优解,必要性得到证明 证毕
- 1
信息
- ID
- 1625
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 143
- 已通过
- 13
- 上传者