1. 程式人生 > >牛客小白月賽9 A簽到(分數取模,逆元)

牛客小白月賽9 A簽到(分數取模,逆元)

傳送門

對分母求一下逆元,把除法取模變成乘法取模,逆元介紹看這裡

這種方法只適合模為質數的情況

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const long long mod=1e9+7;
 4 long long quickpow(long long a, long long b) {
 5     if (b < 0) return 0;
 6     long long ret = 1;
 7     a %= mod;
 8     while(b) {
 9         if
(b & 1) ret = (ret * a) % mod; 10 b >>= 1; 11 a = (a * a) % mod; 12 } 13 return ret; 14 } 15 long long inv(long long a) { 16 return quickpow(a, mod - 2); 17 } 18 int main() 19 { 20 int n; 21 while(~scanf("%d",&n)) 22 { 23 long
long ans=1; 24 for(int i=0; i<n; i++) 25 { 26 long long a,b; 27 scanf("%lld %lld",&a,&b); 28 ans=((ans*(b-a)%mod)*inv(b))%mod;//本來是(b-a)/b.這裡算的是不被砸到的概率 29 // printf("%lld\n",ans); 30 } 31 printf("%lld\n",(1+mod-ans)%mod);//
輸出被砸到的概率 32 } 33 return 0; 34 }
View Code