当 gcd ( a , b ) ∤ c \gcd(a,b)\nmid c gcd(a,b)∤c时,显然等式不可能成立,输出-1。
否则,可以将 a , b , c a,b,c a,b,c都除以 gcd ( a , b ) \gcd(a,b) gcd(a,b),只要这个等式成立,原等式一定成立,这样也就使得 gcd ( a , b ) = 1 \gcd(a,b)=1 gcd(a,b)=1了。
然后用 exgcd \operatorname{exgcd} exgcd求出使得 a × x + b × y = 1 a\times x+b\times y=1 a×x+b×y=1成立的 x x x和 y y y,再将 x x x和 y y y都乘 c c c,这样就满足 a × x + b × y = c a\times x+b\times y=c a×x+b×y=c了。 exgcd \operatorname{exgcd} exgcd怎么用看这里。
然后考虑是否有正整数解。显然当 x x x越小时 y y y越大,那就让 x x x取最小正整数,如果这时 y > 0 y>0 y>0,则有正整数解,否则没有。
那 x x x如何取最小正整数呢?我们已知一组整数解了,设为 x 1 x_1 x1和 y 1