luogu P5656

P5656

\(exgcd\) 裸题,但是细节好多……

题目要求 \(ax+by=c\) ,使用 \(exgcd\) 可以求出一组特解,我们设特解为 \(x_0, y_0\)

求出这组特解之后,本题主要围绕这组特解计算。

  • 求最小正整数解。

    对式子化简一下,变为

    \[a(x_0+p)+b(y_0-q)=c \]

    这里 \(p,q\) 都是整数,\(x_0+p\)\(y_0+q\) 分别表示 \(x\) 的通解和 \(y\) 的通解。

    要使这个等式成立,显然 \(a\times p=b\times q\) ,解得 \(p=\frac{b\times q}{a}\)

    因为 \(p\) 是整数,那 \(a \mid b\times q, b \mid b \times q\) ,所以 \(b \times q\) 最小值为 \(lcm (a,b)\)

    \[b\times q=lcm (a,b)\\ b\times q=\frac{a\times b}{gcd (a,b)}\\ q=\frac{a}{gcd(a,b)} \]

    同理,得 \(p=\frac{a}{gcd(a,b)}\)

    就是说,任意一组解 \(x_0\) 每变化 \(p\) 就有一组解, \(y_0\) 同理。

    那现在要求 \(x\) 的最小正整数解,那就是 \(x-(x-1)/q*q\) ,等价于 \((x \bmod q + q) \bmod q\)\(y\) 同理。

  • 求正整数解的数量。

    因为 \(x_0\) 每变化 \(p\) 就有一组解,现在已知 \(x\) 的最小正整数解,而且 \(x\) 越大 \(y\) 就应该越小,所以就知道了 \(y\) 的最大整数解。

    \(mx,my\) 分别表示 \(x,y\) 的最小正整数解和最大整数解。

    这时,就可以判断有无正整数解了。有正整数解,当且仅当 \(mx > 0\) 并且 \(my > 0\)

    若有正整数解,就能求正整数解的数量,因为已知 \(y\) 的最大正整数解,而且 \(y\) 每变化 \(q\) 就有一组解,所以正整数解的数量为 \((my-1)/q*q+1\)

posted @ 2022-08-29 10:32  zcxxxxx  阅读(30)  评论(0编辑  收藏  举报