<转发>首先设u=gcd(a,b),v=lcm(a,b),由a*b=gcd(a,b)*lcm(a,b)得到u*v=y1+y2*u+y3*c,然后是分情况讨论。
①y1>0
易得u|y1,枚举y1的因数即可。有v=(y1+y2*u)/(u-c)。注意v不能为负数。
②y1=0,y2>0
设v=k*u,则有k*u=y2+y3*k,得k|y2。所以可以枚举y2的因数。有u=y3+y2/k,v=k*y3+y2。
③y1=0,y2=0,y3>0
此时只需要x1,x2中任意一数为y3,另一数为k*y3即可。
④y1=0,y2=0,y3=0
显然无解。
前两种情况中,只要获得了确定的k,即v/u,就可以计算出数对的数量。所有k对应的数对数量之和就是答案。