/************************************************************************/ |题意: 输入a, b, c ; a,b只用 + - 俩中运算使其结果等于c | 思路: 其实就是求 ax + by = c 的整数解,又此方程为线性丢番图方程 | 根据定理: 设a b 是整数且d=gcd(a,b),如果c%gcd(a,b)!=0则方程无整数解 | 若c%gcd(a,b)==0则有无穷多个解。另外如果x0,y0是方程的特解,那么方程的解 | 可表示为 x = x0 + (b/d)k; y = y0 + (a/d)k k=Z /************************************************************************/ #include<iostream> #include<cmath> #include<algorithm> using namespace std; //求三个数中的最小数 #define min(a, b)(a<b ? a:b) #define min_three(a, b, c)(a<min(b, c) ? a:min(b, c)) //求a b的最大公约数 int gcd(int a, int b) { if(b==0) return a; else return gcd(b, a%b); } //扩展欧几里得算法 求出方程的特解 int ex_gcd(int a, int b, int &x, int &y) { if(b==0) { x = 1; y = 0; return a;} int d = ex_gcd(b, a%b, x, y);