日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GCD LCM 欧几里得算法 扩展欧几里得算法

發布時間:2024/10/6 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GCD LCM 欧几里得算法 扩展欧几里得算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

歐幾里得算法:
輾轉相除法的關鍵恒等式:gcd(a,b)=gcd(b,a mod b);

邊界條件:gcd(a,0)=a;

//最大公約數 int gcd(int a,int b) {return b==0?a:gcd(b,a%b);}

?公式:?
gcd(a,b)*lcm(a,b) = a*b;
最小公倍數:
lcm(a,b)=a/gcd(a,b)*b;//先除后除?
lcm(a,b)=a*b/gcd(a,b); //錯誤,a*b可能會溢出?

擴展歐幾里得算法:

//求整數x和y,使得a*x+b*y=d,且|x|+|y|最小,d=gcd(x,y) void exgcd(ll a,ll b,ll &d,ll &x,ll &y) {if(!b) {d=a; x=1; y=0;}else {exgcd(b,a%b,d,y,x);y-=x*(a/b);} }

給一個不定方程Ax+By+C=0. 這個方程是否存在整數解?

如果存在,就輸出一組x和y,否則輸出-1

輸入

有多組樣例,每行三個數字A,B,C

-2×10^9?< A,B,C <?2×10^9?

輸出

若有解,輸出一行x和y,以空格隔開。否則輸出-1

樣例輸入

2 5 3 931480234 -1767614767 -320146190 -1548994394 -1586527767 -1203252104 1906842444 749552572 -1693767003 -1183748658 875864960 -1315510852 200000003 200000001 1

樣例輸出

6 -3 -98880374013340920 -52107006370101410 -878123061596147680 857348814150663048 -1 -97498198168399474 -131770725522871624 100000000 -100000001

?一個二元一次方程如果存在整數解,那么就有多組(x,y)滿足方程,用擴展歐幾里得定理求出來的(x,y)是確定的

如果? C%gcd(A,B)不等于0,說明方程 Ax + By = C 無整數解。

#include<bits/stdc++.h> using namespace std; typedef long long ll; void exgcd(ll a,ll b,ll &d,ll &x,ll &y)//擴展歐幾里得 {if(!b){//若b=0,gcd(a,b)=gcd(a,0)=a;d=a;//a,b的最大公約數x=1;y=0;}else{exgcd(b,a%b,d,y,x);y-=x*(a/b);} } int main() {ll a,b,c;while(scanf("%lld%lld%lld",&a,&b,&c)!=EOF){ll x=0,y=0,d=0;exgcd(a,b,d,x,y);//printf("%d\n",d);if(c%d==0)printf("%lld %lld\n",-x*(c/d),-y*(c/d));//求不定方程Ax+By+C=0的一組整數解//printf("%lld %lld\n",x*(c/d),y*(c/d));//求不定方程Ax+By=c的一組整數解else//不存在整數解printf("-1\n");}return 0; }

?

總結

以上是生活随笔為你收集整理的GCD LCM 欧几里得算法 扩展欧几里得算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。