模运算的世界--逆元

  • 定义补充:

    欧拉函数是指从1-n中与n互质的数的个数。

  • 1.逆元

    求解线性方程 ax=b(mod m)

    Ax=1 (mod m) 等价于 ax=1+mk

    变形为 ax-mk=1x的问题,这个问题可以扩展欧几里得extgcd求解。

    如果gcda,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;
    }

posted @ 2017-09-04 14:27  Bryce1010  阅读(98)  评论(0编辑  收藏  举报