逆元

抽卡

https://ac.nowcoder.com/acm/problem/205461

#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;
}
long long gcd(long long x,long long y){
    if(y==0) return x;
    return gcd(y,x%y);
}
int main(){
    int n;
    cin>>n;
    long long c=1,d=1;
    long long a[100005],b[100005];
    for(int i=0;i<n;i++) cin>>a[i];
    for(int i=0;i<n;i++) cin>>b[i];
    for(int i=0;i<n;i++){
        c=(c%1000000007)*(a[i]-b[i])%1000000007;
        d=(d%1000000007)*a[i]%1000000007;
    }
    long long e=gcd(c,d);
    c=c/e%mod;
    d=d/e%mod;
    cout<<(mod+1-c%mod*power(d,mod-2)%mod)%mod<<endl;
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务