乘法逆元&&概率论

乘法逆元

若整数 b b b, m m m互质, 并且 b ∣ a b|a ba,则存在一个整数 x x x,使得 a / b ≡ a ∗ x ( m o d   m ) a/b \equiv a * x(mod \ m) a/bax(mod m)。称x为b的模m的乘法逆元,记为 b − 1 ( m o d   m ) b^{-1}(mod \ m) b1(mod m)
因为 a / b ≡ a ∗ b − 1 ≡   a / b ∗ b ∗ b − 1 ( m o d   m ) a/b \equiv a * b^{-1}\equiv \ a/b * b*b^{-1}(mod \ m) a/bab1 a/bbb1(mod m)
如果p是质数,根据费马小定理 b p − 1 ≡ 1 ( m o d   p ) b^{p-1} \equiv1(mod \ p) bp11(mod p),既 b ∗ b p − 2 ≡ 1 ( m o d   p ) b*b^{p-2} \equiv1(mod \ p) bbp21(mod p),因此,当 p p p为质数时, p p p的乘法逆元为 b p − 2 b^{p-2} bp2
例题
添加链接描述
思路
求抽到想要的卡的概率,直接先求出全部抽完都没有想要的卡的概率,然后用1减去这个概率就可以了。
code

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 1e6+5;
const ll mod = 1e9+7;
ll n, a[N], b[N], ans = 1;
ll power(ll a, ll b)
{
    ll ans = 1 % mod;
    for(; b; b >>= 1)
    {
        if(b&1)
            ans = (ll) ans * a % mod;
        a = (ll) a * a % mod;
    }
    return ans;
}
ll inv(ll x) //乘法逆元
{
    return power(x, mod-2);
}
int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++)
        cin >> a[i];
    for(int i = 1; i <= n; i++)
        cin >> b[i];
    for(int i = 1; i <= n; i++)
        ans = ans * (a[i] - b[i]) % mod * inv(a[i]) % mod;
    cout << (mod+(1-ans)) % mod << endl;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值