题目链接

BZOJ3738

题解

复习

同上

但是为了消去因子\(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】的更多相关文章

  1. 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$中不 ...

  2. bzoj 4830: [Hnoi2017]抛硬币 [范德蒙德卷积 扩展lucas]

    4830: [Hnoi2017]抛硬币 题意:A投a次硬币,B投b次硬币,a比b正面朝上次数多的方案数,模\(10^k\). \(b \le a \le b+10000 \le 10^{15}, k ...

  3. 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 ...

  4. BZOJ_2142_礼物_扩展lucas+组合数取模+CRT

    BZOJ_2142_礼物_扩展lucas+组合数取模 Description 一年一度的圣诞节快要来到了.每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小E 心目中的重要性不同 ...

  5. 扩展CRT +扩展LUCAS

    再次感谢zyf2000超强的讲解. 扩展CRT其实就是爆推式子,然后一路合并,只是最后一个式子上我有点小疑惑,但整体还算好理解. #include<iostream> #include&l ...

  6. BZOJ3129 SDOI2013方程(容斥原理+扩展lucas)

    没有限制的话算一个组合数就好了.对于不小于某个数的限制可以直接减掉,而不大于某个数的限制很容易想到容斥,枚举哪些超过限制即可. 一般情况下n.m.p都是1e9级别的组合数没办法算.不过可以发现模数已经 ...

  7. 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 ...

  8. P2467 [SDOI2010]地精部落 (dp+组合数)【扩展Lucas好难不会】

    题目链接:传送门 题目: 题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为N的山脉H可分为从左到右的N段,每段有一个独一无二的高度Hi,其 ...

  9. 【learning】 扩展lucas定理

    首先说下啥是lucas定理: $\binom n m \equiv \binom {n\%P} {m\%P} \times \binom{n/P}{m/P} \pmod P$ 借助这个定理,求$\bi ...

随机推荐

  1. 解决微云登陆出现wns login error的问题

    原文首发我的主力博客 http://anforen.com/wp/2017/04/weiyunwns_login_error/ PC版微云客户端出现登陆出现wns login error 完全退出QQ ...

  2. 20155217《网络对抗》Exp06 信息搜集与漏洞扫描

    20155217<网络对抗>Exp06 信息搜集与漏洞扫描 实践内容 各种搜索技巧的应用 DNS IP注册信息的查询 基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务的查点 ...

  3. mfc 线程的优先级

    知识点:  线程优先级  获取当前线程句柄  线程优先级设置  线程优先级变动  线程优先级获取 一.线程优先级(Thread priority ) 简单的说就是(线程)的优先级越高,那么就 ...

  4. 文章翻译:Recommending items to more than a billion people(面向十亿级用户的推荐系统)

    Web上数据的增长使得在完整的数据集上使用许多机器学习算法变得更加困难.特别是对于个性化推荐问题,数据采样通常不是一种选择,需要对分布式算法设计进行创新,以便我们能够扩展到这些不断增长的数据集. 协同 ...

  5. Paxos算法浅析

    前言在文章2PC/3PC到底是啥中介绍了2PC这种一致性协议,从文中了解到2PC更多的被用在了状态一致性上(分布式事务),在数据一致性中很少被使用:而Paxos正是在数据一致性中被广泛使用,在过去十年 ...

  6. CSS快速入门-组合选择器

    <div class="gradefather"> hello1 <div class="father">hello2 <p cl ...

  7. mysql学习(4)python操作数据库

    整理了一下前面3期学的内容后,现在练习使用python去操作数据库 #!python3# coding:utf-8import pymysqlclass mysql_option(): def __i ...

  8. 《Linux内核设计与实现》 第一、二章学习笔记

    第一章 Linux内核简介 一.Unix 1.Unix的特点 简洁 绝大部分东西都被当做文件对待.这种抽象使对数据和对设备的操作都是通过一套相同的系统调用借口来进行的:open(),read(),wr ...

  9. 作业六:分析Linux内核创建一个新进程的过程

    分析Linux内核创建一个新进程的过程 进程描述符PCB----task_struct数据结构 操作系统:1.进程管理 2.内存管理 3 文件系统 一.新进程如何创建和修改task_struct数据结 ...

  10. win10下装上virtualbox 以及在virtualbox上装上 ubuntu 12.04

    首先要下载virtual 在win10下可能第一步你就遇到了麻烦 首先刚开始我装的是最新版本的virtualbox 5.0.24.8355 (直接百度就可搜到) 然后可以按照这个教程 http://j ...