牛客小白月赛9 A:签到(除法取模mod的技巧+快速幂)

首先:推荐两个博客:

1:(除法求模中的两种运算)http://www.cnblogs.com/maybe96/p/9382714.html

2:(mod相关小技巧)https://blog.csdn.net/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;
 }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值