逆元的题

题目

题解 D

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

const ll mod = 1e9+7;
ll power(ll a, ll b)
{
    
    
    ll res = 1;
    while(b)
    {
    
    
        if(b & 1) res = res * a % mod;
        b >>= 1;
        a = a * a % mod;
    }
    return res;
}
ll inv(ll x)//求逆元
{
    
    
    return power(x, mod - 2);   //结合求逆元的博客  易懂    x的p-2次方就是 x的逆元
}
ll a[100010], b[100010];
int main()
{
    
    
    ll n, k, i, j;
    cin >> n;
    for(i = 0; i < n; i++)cin >> a[i];
    for(i = 0; i < n; i++)cin >> b[i];
    ll res = 1;
    for(i=0; i < n; i++)
    {
    
    
        res = res * (a[i] - b[i]) % mod * inv(a[i]) % mod;
    }
    cout << (mod + (1 - res)) % mod;// 1-res 是负数的话  +mod 变成正数  然后取模   (~浅显易懂)哈哈
    // 前边的计算 一直在 %mod   所以数据一直在 小于mod 的 范围内
}

猜你喜欢

转载自blog.csdn.net/cosx_/article/details/109787845