概述
首先是快速幂的算法
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的模等于ab的逆元的模;
逆元就是这样应用的;
//逆元:
ll inv(ll a){
return qpow(a, mod-2); // qpow()是快速幂
}
要知道2^n=Cn0+Cn1+…+Cnn;
Gym - 101775A
#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 - 101775A与快速幂和除法求模所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复