数学知识-扩展欧几里得
原创
©著作权归作者所有:来自51CTO博客作者清风紫雪的原创作品,请联系作者获取转载授权,否则将追究法律责任
扩展欧几里得算法
算法原理
代码
#include<bits/stdc++.h>
using namespace std;
int n;
int exgcd(int a,int b,int &x,int &y)
{
if(!b)
{
x=1,y=0;
return a;
}
int d=exgcd(b,a%b,y,x);
y-=a/b*x;
return d;
}
int main()
{
int i,j;
cin>>n;
while(n--)
{
int a,b,x,y;
cin>>a>>b;
exgcd(a,b,x,y);
cout<<x<<" "<<y<<endl;
}
return 0;
}
线性同余方程
算法原理
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
int exgcd(int a,int b,int &x,int &y)
{
if(!b)
{
x=1,y=0;
return a;
}
int d=exgcd(b,a%b,y,x);
y-=a/b*x;
return d;
}
int main()
{
int i,j;
cin>>n;
while(n--)
{
int a,b,x,y,m;
cin>>a>>b>>m;
int d=exgcd(a,m,x,y);
if(b%d)
puts("impossible");
else
cout<<(ll)x*(b/d)%m<<endl;
}
return 0;
}