模运算的世界--逆元
-
定义补充:
欧拉函数是指从1-n中与n互质的数的个数。
-
1.逆元
求解线性方程 ax=b(mod m)
Ax=1 (mod m) 等价于 ax=1+mk
变形为 ax-mk=1求x的问题,这个问题可以扩展欧几里得extgcd求解。
如果gcd(a,m)!=1,那么逆元不存在。
#include<iostream> using namespace std; void ext_gcd(int a,int b,int &d,int &x,int &y) { if(!b) { d=a; x=1;y=0; } else { ext_gcd(b,a%b,d,y,x); y-=x*(a/b); } } int mod_inverse(int a,int m) { int x,y,d; ext_gcd(a,m,d,x,y); return (m+x%m)%m; } int main() { int a,m; while(cin>>a>>m) cout<<mod_inverse(a,m)<<endl;; return 0; }