逆元

小费马定理求逆元(复杂度O(logn))

ll FastPower(ll n, ll k) {
    ll ans = 1;
    k %= mod;
    while(n) {
        if(n % 2)  { // n & 1
            ans = (ans * k) % mod;
        }
        n >>= 1;
        k = (k * k) % mod; 
    }
    return ans;
}
ll Inverse(ll n) {
    return FastPower(n, mod - 2);
}

扩展欧几里德求逆元(复杂度O(logn))

    ll extend_gcd(ll a, ll b, ll &x, ll &y) {  
        if (b == 0) {  
            x = 1, y = 0;  
            return a;  
        }  
        else {  
            ll r = extend_gcd(b, a % b, y, x);  
            y -= x * (a / b);  
            return r;  
        }  
    }  
    ll Inverse(ll a, ll n) {  
        ll x, y;  
        extend_gcd(a, n, x, y);  
        x = (x % n + n) % n;  
        return x;  
    }  

逆元线性筛(复杂度O(n))

const int mod = 1000000009;  
const int maxn = 10005;  
int inv[maxn];  
inv[1] = 1;  
for(int i = 2; i < 10000; i++)  
    inv[i] = inv[mod % i] * (mod - mod / i) % mod; 
阶乘求逆元

    inv[maxn]=mod_pow(fac[maxn],mod-2);  
    for(ll i=maxn-1;i>=0;i--)  
        inv[i]=(inv[i+1]*(i+1))%mod;  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值