线性同余方程的求解
2015-08-03 20:16
477 查看
问题:在已知a,b,c的情况下求解是否存在q,p使之满足p*a+q*b=c;如果存在找出一组输出。
解题思路:依据扩展的欧几里得算法计算出p*a+q*b=gcd(a,b)的解x与y,则x*c/gcd(a,b)与y*c/gcd(a,b)即为问题的一组解。
扩展的欧几里得:
源代码:
解题思路:依据扩展的欧几里得算法计算出p*a+q*b=gcd(a,b)的解x与y,则x*c/gcd(a,b)与y*c/gcd(a,b)即为问题的一组解。
扩展的欧几里得:
源代码:
[code]#include<iostream>//求解线性同余方程a*x+b*y=c using namespace std; int extended_gcd(int a,int b,int &x,int &y){ if(!b){ x=1; y=0; return a; } int r=extended_gcd(b,a%b,x,y); int t=x; x=y; y=t-a/b*y; return r; } bool linearEquation(int a,int b,int c,int&x,int&y){ int r=extended_gcd(a,b,x,y); if(c%r!=0) return false; int k=c/r; x*=k; y*=k; return true; } int main(){ int a,b,c,x,y; while(cin>>a>>b>>c){ if(!linearEquation(a,b,c,x,y)){ cout<<"No answer!"<<endl; continue; } cout<<x<<" "<<y<<endl; } return 0; }
相关文章推荐
- 选择判断语句的用法和区别
- self、类的继承和派生、实例变量修饰符、多态、类的本质
- js实现抢购倒计时精确到毫秒 到期提示“抢购已结束”
- C#进程同步之内存共享
- 文章标题
- Unknown column '??????' in 'where clause'问题
- C# 的时间戳转换
- 76. Minimum Window Substring
- jni调试3(线程调试env变量问题)
- Java Socket编程(转)
- HDOJ1241Oil Deposits(DFS)
- What causes Cardinality to be wrong?
- 求无向图的最短路径问题
- Unix 與 MS-DOS 指令對照表
- 长时间后mysql自动关闭连接
- MFC:CCmdUI类的功能
- Top k问题的一个应用
- assert
- CentOS6.5中的网络配置(静态IP设置)
- c++11 中的 move 与 forward