BZOJ3738 [Ontak2013]Kapitał 【扩展Lucas】
题目链接
题解
复习
同上
但是为了消去因子\(10\),处理\(2^k\)的时候,乘回\(2^{k_1}\)时,应同时计算\(5^{k_2}\)
如果\(k_1 \ge k_2\),乘上\(5^{k_2}\)的逆元
如果\(k_1 < k_2\),乘上\(5^{k_1}\)的逆元
处理\(5^k\)的时候同理
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<map>
#define LL long long int
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define cls(s,v) memset(s,v,sizeof(s))
#define mp(a,b) make_pair<int,int>(a,b)
#define cp pair<int,int>
using namespace std;
const int maxn = 2000005,maxm = 100005,INF = 0x3f3f3f3f;
LL pr[2],pk[2],fac[2],P,k1,k2,now;
inline LL qpow(LL a,LL b,LL p){
LL re = 1;
for (; b; b >>= 1,a = 1ll * a * a % p)
if (b & 1) re = 1ll * re * a % p;
return re;
}
inline void exgcd(LL a,LL b,LL&d ,LL& x,LL& y){
if (!b){d = a; x = 1; y = 0;}
else exgcd(b,a % b,d,y,x),y -= (a / b) * x;
}
inline LL inv(LL n,LL p){
LL d,x,y; exgcd(n,p,d,x,y);
return (x % p + p) % p;
}
inline LL Fac(LL n,LL P,LL p){
if (!n) return 1;
LL ans = 1;
if (n / P) ans = qpow(fac[now],n / P,P);
LL E = n % P;
for (LL i = 2; i <= E; i++)
if (i % p) ans = 1ll * ans * i % P;
return 1ll * ans * Fac(n / p,P,p) % P;
}
inline int C(LL n,LL m,int pk,int p){
now = (p == 5);
LL a = Fac(n,pk,p),b = Fac(m,pk,p),c = Fac(n - m,pk,p),ans;
ans = 1ll * a * inv(b,pk) % pk * inv(c,pk) % pk;
if (p == 2){
if (k1 >= k2)
ans = 1ll * ans * qpow(inv(5,pk),k2,pk) % pk * qpow(2,k1 - k2,pk) % pk;
else ans = 1ll * ans * qpow(inv(5,pk),k1,pk) % pk;
}
else {
if (k1 >= k2)
ans = 1ll * ans * qpow(inv(2,pk),k2,pk) % pk;
else ans = 1ll * ans * qpow(inv(2,pk),k1,pk) % pk * qpow(5,k2 - k1,pk) % pk;
}
return 1ll * ans * (P / pk) % P * inv(P / pk,pk) % P;
}
inline LL exlucas(LL n,LL m){
for (LL i = n; i; i /= 2) k1 += i / 2;
for (LL i = m; i; i /= 2) k1 -= i / 2;
for (LL i = n - m; i; i /= 2) k1 -= i / 2;
for (LL i = n; i; i /= 5) k2 += i / 5;
for (LL i = m; i; i /= 5) k2 -= i / 5;
for (LL i = n - m; i; i /= 5) k2 -= i / 5;
LL re = 0;
re = (re + C(n,m,pk[0],pr[0])) % P;
re = (re + C(n,m,pk[1],pr[1])) % P;
return re;
}
int main(){
LL N,M,K;
cin >> N >> M >> K;
pr[0] = 2; pr[1] = 5; pk[0] = pk[1] = P = 1;
REP(i,K) pk[0] *= 2,pk[1] *= 5,P *= 10;
fac[0] = 1; for (LL i = 2; i < pk[0]; i++) if (i % 2) fac[0] = 1ll * fac[0] * i % pk[0];
fac[1] = 1; for (LL i = 2; i < pk[1]; i++) if (i % 5) fac[1] = 1ll * fac[1] * i % pk[1];
cout << setfill('0') << setw(K) << exlucas(N + M,N) << endl;
return 0;
}
BZOJ3738 [Ontak2013]Kapitał 【扩展Lucas】的更多相关文章
- BZOJ3738 : [Ontak2013]Kapitał
$C_{N+M}^N=\frac{(N+M)!}{N!M!}$ 考虑求出$ans\bmod 10^9$的值 $10^9=2^9\times5^9$ 以$2^9$为例,先预处理出$1$..$2^9$中不 ...
- bzoj 4830: [Hnoi2017]抛硬币 [范德蒙德卷积 扩展lucas]
4830: [Hnoi2017]抛硬币 题意:A投a次硬币,B投b次硬币,a比b正面朝上次数多的方案数,模\(10^k\). \(b \le a \le b+10000 \le 10^{15}, k ...
- 2015 ICL, Finals, Div. 1 Ceizenpok’s formula(组合数取模,扩展lucas定理)
J. Ceizenpok’s formula time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- BZOJ_2142_礼物_扩展lucas+组合数取模+CRT
BZOJ_2142_礼物_扩展lucas+组合数取模 Description 一年一度的圣诞节快要来到了.每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小E 心目中的重要性不同 ...
- 扩展CRT +扩展LUCAS
再次感谢zyf2000超强的讲解. 扩展CRT其实就是爆推式子,然后一路合并,只是最后一个式子上我有点小疑惑,但整体还算好理解. #include<iostream> #include&l ...
- BZOJ3129 SDOI2013方程(容斥原理+扩展lucas)
没有限制的话算一个组合数就好了.对于不小于某个数的限制可以直接减掉,而不大于某个数的限制很容易想到容斥,枚举哪些超过限制即可. 一般情况下n.m.p都是1e9级别的组合数没办法算.不过可以发现模数已经 ...
- Codeforces.100633J.Ceizenpok's formula(扩展Lucas)
题目链接 ->扩展Lucas //求C_n^k%m #include <cstdio> typedef long long LL; LL FP(LL x,LL k,LL p) { L ...
- P2467 [SDOI2010]地精部落 (dp+组合数)【扩展Lucas好难不会】
题目链接:传送门 题目: 题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为N的山脉H可分为从左到右的N段,每段有一个独一无二的高度Hi,其 ...
- 【learning】 扩展lucas定理
首先说下啥是lucas定理: $\binom n m \equiv \binom {n\%P} {m\%P} \times \binom{n/P}{m/P} \pmod P$ 借助这个定理,求$\bi ...
随机推荐
- Linux内核中_IO,_IOR,_IOW,_IOWR宏的用法
#define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0) #define _IOR(type,nr,size) _IOC(_IOC_RE ...
- Linux每天一个命令:iperf
iperf命令 Iperf 是一个网络性能测试工具.Iperf可以测试最大TCP和UDP带宽性能,具有多种参数和UDP特性,可以根据需要调整,可以报告带宽.延迟抖动和数据包丢失.下载地址:https: ...
- 使用 restTemplate 实现get/post 请求
get 请求(这里是在 idea 的 test包中,所以需要直接 new RestTemplate() ) 即:RestTemplate restTemplate = new RestTemplate ...
- 微信小程序之分享或转发功能(自定义button样式)
小程序页面内发起转发 通过给 button 组件设置属性open-type="share",可以在用户点击按钮后触发 Page.onShareAppMessage 事件,如果当前页 ...
- 一步一步来熟悉Akka.Net(一)
一步一步来熟悉Akka.Net(一) 标签(空格分隔): .netcore 分布式 一.不利flag 好久没写过文章了,翻开前几年写的博客,看到有两个目标"代码生成器"和&qu ...
- C#_父窗体跟子窗体的控件操作
很多人都苦恼于如何在子窗体中操作主窗体上的控件,或者在主窗体中操作子窗体上的控件.相比较而言,后面稍微简单一些,只要在主窗体中创建子窗体的时候,保留所创建子窗体对象即可. 下面重点介绍前一种,目前常见 ...
- js的各种正则表达式
验证各种手机包括成都"028-"开头的座机号验证 if (!(/^(16[8]|13[0-9]|15[0|3|6|7|8|9]|18[7])\d{8}|(028-)\d{7}$/. ...
- java算法面试题
前言:线上面试题与大家分享,并记录求职道路的酸甜苦辣,特此留念. 李雷和韩梅梅坐前后排,上课想说话怕被老师发现,所以改为传小纸条.为了不被老师发现他们纸条上说的是啥,他们约定了如下方法传递信息:将26 ...
- (1) English Learning
1. no-brainer 不必花脑筋的事物 This tool is really no-brainer that almost everyone can use it. 这个工具太简单用了,不会 ...
- MIT-6.824 MapReduce
概述 MapReduce是由JeffreyDean提出的一种处理大数据的编程模型,用户定义map和reduce函数,map函数处理原始数据生成一系列键值对中间数据,reduce函数并合相同key的键值 ...