用扩展欧几里得(Euclid)算法计算1234 mod

2020-11-23 18:43:03 字数 7302 阅读 3408

1楼:匿名用户

q x1 x2 x3 y1 y2 y3

1 0 4321 0 1 1234

3 0 1 1234 1 -3 619

1 1 -3 619 -1 4 615

1 -1 4 615 2 -7 4

153 2 -7 4 -307 1075 3

1 -307 1075 2 309 -1082 1

4321-1082=3239

2楼:匿名用户

1234 mod 4321 的乘法逆元是怎么算的啊,求教

扩展的欧几里得算法求逆元

3楼:匿名用户

数对 x,y ,使得 ***(a,b)=ax+by。

c++语言实现

#include

#include

using namespace std;

int x,y,q;

void extend_eulid(int a,int b)else

}int main()

你给的题目实际上就是: 给定 a 和b。

a 要有逆元 , 那么***( a , b ) = 1假设a的逆元 为x , 那么就有 a * x mod b = 1

也就是 a * x + b * y = 1上面的程序中输入a和b就可以求出对应的x和y。

其中 x 就是 a的逆元

用c语言编写扩展欧几里德算法用来求乘法逆元ab=1 mod(n) 要求我输入b,n,求出a。请编译运行通过,谢谢啦

4楼:有钱买不起房子

#include

int extendedeuclid( int f,int d ,int *result);

int main()

int extendedeuclid( int f,int d ,int *result)

if ( y3 == 1 )

q = x3/y3;

t1 = x1 - q*y1;

t2 = x2 - q*y2;

t3 = x3 - q*y3;

x1 = y1;

x2 = y2;

x3 = y3;

y1 = t1;

y2 = t2;

y3 = t3;}}

/*输入两个数:

5 14

5和14互素,乘法的逆元是:3*/

5楼:匿名用户

这是一个错误的算法啊

用c语言编制的求模逆元的扩展欧几里德算法,只要能基本上实现这个功能就行

6楼:匿名用户

** http://hi.baidu.***/forverlin1204/blog/item/dadfc612faddbfdbf6039e5f.html

#include

using namespace std;

//举例 3x+4y=1 ax+by=1

//得到一组解x0=-1,y0=1 通解为x=-1+4k,y=1-3k

inline __int64 extend_***(__int64 a,__int64 b,__int64 &x,__int64 &y)//ax+by=1返回a,b的***,同时求的一组满足题目的最小正整数解

ans=extend_***(b,a%b,x,y);t=x;x=y;y=t-(a/b)*y;

return ans;

}//(a/b)%mod=c 逆元为p,(p*b)%mod=1

//(a/b)*(p*b)%mod=c*1%mod=c

// (p*b)%mod=1 等价于 p*b-(p*b)/mod*mod=1其中要求p,b已知 等价于 ax+by=1

//其中x=p(x就是逆元),y=p/mod,a=b,b=b*mod 那么调用extend_***(b,b*mod,x,y)即可求(a/b)%mod的逆元等价于a*p%mod

int main()

cout<<"x="<

相关阅读