蓝桥杯_乘法逆元_费马小定理求乘法逆元

蓝桥杯_乘法逆元_费马小定理求乘法逆元

//

乘法逆元 -- 模运算不满足分配律

定义:       a*inv(a) == 1( mod p ) -> a 和 inv(a) 互为乘法逆元
充要条件:   gcd( a,p ) == 1
应用:       ( a/b )%p == a*( inv(b) )%p

费马小定理求乘法逆元

    gcd( a,p ) == 1 -> a^( p-1 ) == 1( mod p ) 

    等价代换         
        -> a*inv(a) == a^( p-1 )%p
        -> inv(a) == a^( p-2 )%p                //

//
#include<bits/stdc++.h>
using namespace std;
#define int long long 

const int MOD=1e9+7;

int fastpow( int in,int n )
{
    int ans=1;
    while( n )
    {
        if( n&1 ) ans=ans*in%MOD;
        in=in*in%MOD;
        n>>=1;
    }
    return ans;
}

signed main()
{
    int t,n; cin>>t;

    while( t-- )
    {
        cin>>n; cout<<fastpow( n,MOD-2 )<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_63173957/article/details/125357401