我是靠谱客的博主 顺利魔镜,这篇文章主要介绍Gym - 101775A与快速幂和除法求模,现在分享给大家,希望可以做个参考。

首先是快速幂的算法

复制代码
1
2
3
4
5
6
7
8
9
10
11
ll qpow(ll base ,ll power) { ll pro=1; while(power){ if(power&1) pro=pro*base%mod; base=base*base%mod; power>>=1; } return pro; }

其次是求逆元
什么是逆元
当求解公式:(a/b)%m 时,因b可能会过大,会出现爆精度的情况,所以需变除法为乘法:
设c是b的逆元,则有bc≡1(mod m);
则(a/b)%m = (a/b)1%m = (a/b)bc%m = ac(mod m);
即a/b的模等于a
b的逆元的模;
逆元就是这样应用的;

复制代码
1
2
3
4
5
//逆元: ll inv(ll a){ return qpow(a, mod-2); // qpow()是快速幂 }

要知道2^n=Cn0+Cn1+…+Cnn;
Gym - 101775A

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <bits/stdc++.h> typedef long long ll; using namespace std; const ll mod=1e9+7; ll qpow(ll base ,ll power) { ll pro=1; while(power){ if(power&1) pro=pro*base%mod; base=base*base%mod; power>>=1; } return pro; } int main() { int T; cin>>T; ll a,b; for(int i=1;i<=T;i++){ cin>>a>>b; ll all=qpow(2,a);//将所求的题转变一下思路,要直接求再怎么优化也要超时 ll m=1,sum=1; for(ll j=1;j<b;j++){ m=(m%mod*(a-j+1)%mod)%mod; m=(m%mod*qpow(j,mod-2)%mod)%mod; sum=(sum%mod+m%mod)%mod; } printf("Case #%d: %lldn",i,(all-sum+mod)%mod); } }

要知道2^n=Cn0+Cn1+…+Cnn;

最后

以上就是顺利魔镜最近收集整理的关于Gym - 101775A与快速幂和除法求模的全部内容,更多相关Gym内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部