ALL:6
AC:3
补题:1
题意:
给定正整数 a , b , d a,b,d a,b,d,求一个正整数 x x x 使得 d ∣ ( a or x ) d\mid(a\operatorname{or}x) d∣(aorx) 且 d ∣ ( b or x ) d\mid(b\operatorname{or}x) d∣(borx),其中 or \operatorname{or} or 表示按位或运算。
思路:考虑最简单的情况: a ∣ x a|x a∣x 与 b ∣ x b|x b∣x 相等。问题可以转化为找到一个 x x x ,使得两个式子成立:
x ≡ a ∣ b ( m o d 2 30 ) x\equiv a|b \pmod {2^{30}} x≡a∣b(mod230)
x ≡ 0 ( m o d d ) x\equiv 0\pmod d x≡0(modd)
这个问题可以用拓展中国剩余定理解决,详见 博客 。列出不定方程,联立并用 exgcd 求解。联立出的不定方程为 2 30 ⋅ k 1 − d ⋅ k 2 = − ( a ∣ b ) 2^{30}\cdot k_1-d\cdot k_2=-(a|b) 230⋅k1−d⋅k2=−(a∣b) ,求特解并偏移即可。
注意一个 exgcd 的坑,传入的系数 a , b > 0 a,b>0 a,b>0 才行,如果传入系数 < 0 <0 <0 ,求出来的特解不正确。因此形如 a ⋅ x − b ⋅ y = c ( a , b > 0 ) a\cdot x-b\cdot y=c(a,b>0) a⋅x−b⋅y=c(a,b>0) 的不定方程可以转化为 a ⋅ x + b ⋅ ( − y ) = c a\cdot x+b\cdot(-y)=c a⋅x+b⋅(−y)=c 然后求解。
AC代码:https://codeforces.com/contest/1748/submission/182418468