对分母求一下逆元,把除法取模变成乘法取模,逆元介绍看这里
这种方法只适合模为质数的情况
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 ",ans); 30 } 31 printf("%lld ",(1+mod-ans)%mod);//输出被砸到的概率 32 } 33 return 0; 34 }