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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

利用扩展欧几里得算法编程求逆元

發(fā)布時間:2025/3/15 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用扩展欧几里得算法编程求逆元 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原理:
1.m是正整數(shù),r屬于Zm,且gcd(r,m)=1,存在s屬于Zm,使得rs=1(mod m)。則整數(shù)s稱為r模整數(shù)m的乘法逆元。
2.對任意的兩個整數(shù)a和b,總存在x和y使得gcd(a,b)=ax+by成立。
3.因為由1知,r和m互素,所以gcd(r,m)=1,則可以使用擴展歐幾里得算法求得x和y,則等式ax+by=1成立。
步驟:
1.輸入兩個數(shù)a,b;a>=b;
2.若b=0,則d=a,x=1,y=0,返回(d,x,y);
3.設x2=1,x1=0,y2=0,y1=1;
4.當b>0時,
(1)q=[a/b],r=a-qb,x=x2-qx1,y=y2-qy1;
(2)a=b,b=r,x2=x1,x1=x,x2=1,y2=y1,y1=y;
5.d=a,x=x2,y=y2,返回(d,x,y);
則x為所求。

代碼實現(xiàn)如下:

#include<stdio.h> int main() { int d, x1, x2, y1, y2,q,r,x,y,a1,b1,a,b; printf("請輸入a和模m:"); scanf("%d,%d", &a, &b); a1 = a, b1 = b; if (a1 < b1) {a1 = b1 + a1;b1 = a1 - b1; a1 = a1 - b1;} if (b1 == 0) {d = a1, x = 1, y =0;printf("存在某個輸入為0");return; } x2 = 1, x1 = 0, y2 = 0, y1 = 1; while (b1 > 0) {q = a1 / b1;r = a1 - q*b1;//余數(shù)x = x2 - q * x1;y = y2 - q * y1;a1 = b1;b1 = r;x2 = x1;x1 = x;y2 = y1;y1 = y;} d = a1, x = x2, y = y2; printf("\n%d在mod%d下的逆元為%d\n",a,b,y); system("pause"); return ; }

總結

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

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