题目描述
题解
很不会同余方程呜呜呜。
可以看成追击问题,于是我们经过化一些式子后能够得到个不等式:
如果对于一个整数 k ∈ [ 0 , H M ) k \in [0,HM) k∈[0,HM) ,存在整数 x x x ,满足
x H M − A ≤ k ( H − 1 ) ≤ x H M + A xHM-A \le k(H-1) \le xHM+A xHM−A≤k(H−1)≤xHM+A
那么这个 k k k 就满足要求
因此,有 − A ≤ k ( H − 1 ) − x H M ≤ A -A \le k(H-1)-xHM \le A −A≤k(H−1)−xHM≤A
若我们规定,对 H M HM HM 取模的值的范围为 [ − H M / 2 , H M / 2 ] [-HM/2,HM/2] [−HM/2,HM/2] ,故就要满足
− A ≤ k ( H − 1 ) m o d H M ≤ A -A \le k(H-1) \mod HM \le A −A≤k(H−1)modHM≤A
因此,设 g = gcd ( H − 1 , H M ) g=\gcd(H-1,HM) g=gcd(H−1,HM) ,根据剩余系,对于 k ∈ [ 0 , H M / g ) k \in [0,HM/g) k∈[0,HM/g) ,有 k ( H − 1 ) m o d H M = . . . − 2 g , − g , 0 , g , 2 g , . . . k(H-1) \mod HM= ...-2g,-g,0,g,2g,... k(H−1)modHM=...−2g,−g,0,g,2g,... ,而且是一一对应的。
因此,存在 A / g × 2 + 1 A/g \times 2+1 A/g×2+1 个 k k k ,满足 k ( H − 1 ) m o d H M k(H-1) \mod HM k(H−1)modHM 在 [ − A , A ] [-A,A] [−A,A] 之间。
而有 g g g 轮这样的 k k k 的取值,故答案为 g × ( A / g × 2 + 1 ) g \times (A/g \times 2+1) g×(A/g×2+1) 。
然后就是需要特判 A = H M / 2 A=HM/2 A=HM/2 的情况就好了。