问题:
ax mod b=c a^x ~ mod ~ b = c ax mod b=c
已知a,b互质(两个数的最大公约数为1),给出a,b,c三个正整数,求x的自小正整数解。
欧几里得算法
概念:
整数a,b的最大公约数一般表示为 gcd(a,b)
终极奥义:gcd(a,b) = gcd(b,a%b)=> 将大规模的问题转变成小规模的问题 ,当转变成gcd(c,0)时,c即为最大公约数
1 当a>b,缩小问题规模的作用
2 当a<b,相当于a和b的位置进行对调
//欧几里得算法就是将较大规模的问题转变成较小规模的问题
int gcd(int a,int b){
//gcd求最大公约数的
cout<<"gcd("<<a<<","<<b<<")=";
if(b) return gcd(b,a%b);
return a;//此时b=0 直接返回a(最大公约数)
}
int main(){
int a,b;
while(cin>>a>>b){
cout<<gcd(a,b)<<endl;
}
return 0;
}
证明:
1、b和a%b的最大公约数,是a和b的公约数
设b,a%b的最大公约数c
b = k1*c
a%b = k2*c
a-k*b = k2*c => a = k2*c+k*b => a = k2*c+k*k1*c
a = (k2+k*k1)*c
b = k1*c
及证:得出结论b和a%b的最大公约数也是a和b的公约数
2、b和a%b的最大公约数也是a和b的最大公约数
a = (x+y*k)*c
b = y*c
定理:假设a和b的最大公约数为c 那么x+y*k和y的最大公约数为1
反正法:假设c不是a和b的最大公约数=>gcd(x+y*k,y)=d | d!=1
x+k*y = n*d
y = m*d
x = n*d-k*y = n*d-k*

本文介绍了密码学中的数学基础,包括欧几里得算法及其扩展,用于解决最大公约数和模逆运算的问题。还讨论了欧拉公式在数论中的应用,并提到了利用扩展欧几里得算法求解线性同余方程。同时,文中通过力扣刷题展示了这些算法的实际应用,如在LeetCode题目287、1175和1071中的运用。
最低0.47元/天 解锁文章
73

被折叠的 条评论
为什么被折叠?



