BZOJ 3738 Ontak2013 Kapitał 数论
来源:互联网 发布:乌合之众知乎 编辑:程序博客网 时间:2024/06/11 21:43
题目大意:求C(n+m,n)去掉末尾所有的0之后的后k位
组合数取模问题……首先k<=9,所以我们考虑直接mod 10^9
将10^9分解质因数,可以得到10^9=2^9*5^9=512*1953125 这两个数都不是很大 所以直接套用组合数取模的模板
具体细节参见 2142 礼物 http://blog.csdn.net/popoqqq/article/details/39891263
消0的时候注意消掉2的时候要乘上相应5的逆元 消5同理
#include <cstdio>#include <cstring>#include <iomanip>#include <iostream>#include <algorithm>#define P1 512ll#define P2 1953125llusing namespace std;typedef long long ll;typedef pair<ll,ll> abcd;ll n,m,k;ll power1[P1+1],power2[P2+1];ll Quick_Power(ll x,ll y,ll p){ ll re=1; while(y) { if(y&1) re*=x,re%=p; x*=x,x%=p; y>>=1; } return re;}abcd Plus(const abcd x,const abcd y,ll p){ return abcd(x.first*y.first%p,x.second+y.second);}abcd Minus(const abcd x,const abcd y,ll p,ll phi_p){ return abcd(x.first*Quick_Power(y.first,phi_p-1,p)%p,x.second-y.second);}abcd Find(ll x,ll p,ll p_a,ll pow[]){ ll i,temp; if(!x) return abcd(1,0); temp=Quick_Power(pow[p_a],x/p_a,p_a)*pow[x%p_a]%p_a; return Plus(abcd(temp,x/p),Find(x/p,p,p_a,pow),p_a);}int main(){ int i; power1[0]=power2[0]=1; for(i=1;i<=P1;i++) power1[i]=power1[i-1]*(i%2?i:1)%P1; for(i=1;i<=P2;i++) power2[i]=power2[i-1]*(i%5?i:1)%P2; cin>>n>>m>>k; abcd p1=Find(n+m,2,P1,power1); p1=Minus(p1,Find(n,2,P1,power1),P1,P1/2*1); p1=Minus(p1,Find(m,2,P1,power1),P1,P1/2*1); abcd p2=Find(n+m,5,P2,power2); p2=Minus(p2,Find(n,5,P2,power2),P2,P2/5*4); p2=Minus(p2,Find(m,5,P2,power2),P2,P2/5*4); ll temp=min(p1.second,p2.second); ll x=p1.first*Quick_Power(2,p1.second-temp,P1)%P1*Quick_Power(205,temp,P1)%P1; ll y=p2.first*Quick_Power(5,p2.second-temp,P2)%P2*Quick_Power(976563,temp,P2)%P2; ll ans=(1953125*109*x+512*1537323*y)%1000000000; cout<<setfill('0')<<setw(k)<<ans%Quick_Power(10,k,1000000001)<<endl;}
0 0
- BZOJ 3738 Ontak2013 Kapitał 数论
- bzoj 3738: [Ontak2013]Kapitał 数论
- bzoj 3738: [Ontak2013]Kapitał
- bzoj 3738: [Ontak2013]Kapitał
- [BZOJ]3738: [Ontak2013]Kapitał 扩展lucas
- [ontak2013]Kapitał 解题报告
- BZOJ 3944 Sum 数论
- BZOJ 2671 Calc 数论
- BZOJ 4173 数学 数论
- BZOJ 1406 - 伪数论
- 【BZOJ 4173】 数学 数论
- BZOJ 1008 越狱 【数论】
- bzoj 1041 数论
- BZOJ 糖果传递-(数论)
- BZOJ-3209 (数论)
- BZOJ-2186 (数论)
- BZOJ 2219 数论之神 数论
- bzoj 2219: 数论之神 数论
- 服务器运维监控项总结
- APNs 推送原理及问题
- LBS+O2O:消费半径上的精准营销
- ajax原理和XmlHttpRequest对象
- POJ 2940:求和
- BZOJ 3738 Ontak2013 Kapitał 数论
- POJ 2964:日历问题
- android 事件派发的流程
- POJ 2972:确定进制
- Linux下Shell介绍
- 在java程序中动态设置java.library.path
- POJ 2975:Caesar 密码
- chown命令
- DevExpress:GridControl中显示时间格式