程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> CF 7C Line(拓展歐幾裡得求線性方程)

CF 7C Line(拓展歐幾裡得求線性方程)

編輯:C++入門知識


題目大意:
給方程Ax + By + C = 0.  其中A,B,C為已知, 求x,y。

分析與總結:
拓展歐幾裡得算法的模板題。這個算法在數論書或者網上都可以找到。
該算法求出線性方程Ax + By = gcd(A, B); 
然後,這個方程可進行轉換:
       Ax + By = gcd(A, B)
=>  Ax + By = -C/z, 其中-C/z = gcd(A, B)
=>  Ax*z + By*z = C. www.2cto.com
其中x, y可以通過拓展歐幾裡得算法求出,
然後,我們只需要求出z, 而z = -C/gcd(A,B);
所以, 最終答案x = x*(-C/gcd(A,B)) ,  y = y*(-C/gcd(A,B)); 

代碼:
[cpp] 
#include<iostream> 
#include<cstdio> 
#include<cstring> 
using namespace std; 
typedef long long LL; 
const LL INF = 5*1e18; 
 
void gcd(LL a, LL b, LL& d,LL& x, LL& y){ 
    if(!b){d=a; x=1; y=0; } 
    else {gcd(b,a%b,d,y,x); y -= x*(a/b); } 

 
int main(){ 
    LL a,b,c,d,x,y; 
    cin >> a >> b >> c; 
    gcd(a,b,d,x,y); 
    if(c%d != 0) 
        puts("-1"); 
    else  
        cout << -x*(c/d) << " " << -y*(c/d) << endl; 
    return 0; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved