首先:推荐两个博客:
1:(除法求模中的两种运算)http://www.cnblogs.com/maybe96/p/9382714.html
2:(mod相关小技巧)https://blog.youkuaiyun.com/kevin66654/article/details/52629487
①:ans=(ans+mod)%mod
②:(a*b)%mod = (a%mod)*(b%mod)%mod
③:(a/b)%mod==a*b^(mod-2)%mod (其中b^(mod-2)较为难算,需要快速幂)
接下来开始正题:
1.网址:https://ac.nowcoder.com/acm/contest/275/A
2.思路:思路很简单,主要是细节问题。
要输入多次a,b,这些(a/b)相乘,最后用1减去它们,要求对1e9+7取模。
查阅资料后知道除法取模和乘法取模不同,公式(a/b)%mod==a*b^(mod-2)%mod,算b^(mod-2)要用到快速幂,模板power_mod函数。还有一个技巧就是最后的 res%modd=(res+modd)%modd
3.代码:
#include <bits/stdc++.h>
#define ll long long
#define N 100005
using namespace std;
ll modd=1e9+7;
// (a/b)%mod==a*b^(mod-2)%mod,
ll power_mod(ll a, ll b, ll mod)
{
ll ans = 1;
while (b)
{
if (b & 1) ans = ans * a % mod;
a = a * a % mod;
b >>= 1;
}
return ans;
}
// a*power_mod(b,mod-2,mod)%mod
int main()
{
ll t,n,sum;
ll a=1,b=1,n1,n2,res=1;
cin>>t;
int num=0;
while(t--)
{
cin>>n1>>n2;
//cout<<n1<<n2<<endl;
n1=n2-n1;
res=res*n1%modd*power_mod(n2,modd-2,modd)%modd;
//cout<<an[0]<<bn[0]<<endl;
}
if(t==0)
res=0;
cout<<(1-res+modd)%modd<<endl;
//cout<<resa<<"/"<<resb<<endl;
return 0;
}