| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
果然还是传说中的扩展欧几里得算法好使int exGcd(int a, int b, int &x0, int &y0)
{
if(b == 0)
{
x0 = 1;
y0 = 0;
return a;
}
int r = exGcd(b, a % b, x0, y0);
int t = x0;
x0 = y0;
y0 = t - a / b * y0;
return r;
}
就这个,它返回gcd(a,b)
对于ax+by=c
如果c%gcd(a,b)!=0无解整数解
否则,通解为(t为任意整数):
x = x0*c/gcd(a,b) + b/gcd(a, b) * t
y = y0*c/gcd(a,b) - a/gcd(a, b) * t
然后根据原题计算出x或y的最小正整数,x0或y0可能是负数(因为a,b可以用负数),所以计算的结果要稍微处理一下
另c语言可以用__int64
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator