2017-08-10 19:35:32

整理者:pprp

用于计算C(m,n) % p

代码如下:

//lucas
#include <iostream> using namespace std; typedef long long ll; //a^b%m 快速幂
int quick_power_mod(int a, int b, int m)
{
int result = ;
int base = a;
while(b > )
{
if(b& == )//如果b是奇数
{
result = (result * base) % m;
}
base = (base * base)%m;
b>>=;
}
return result;
} //组合数取模 C(a,b)%p
ll composition(ll a, ll b, int p)
{
if(a < b)
return ;
if(a == b)
return ;
if(b > a - b) b = a - b; int ans = , ca = , cb = ;
for(ll i = ;i < b; i++)
{
ca = (ca * (a - i))%p;
cb = (cb * (b - i))%p;
} ans = (ca * quick_power_mod(cb,p - , p)) % p;
return ans;
} ll lucas(ll n , ll m , ll p)
{
ll ans = ;
while(n && m && ans)
{
ans = (ans * composition(n%p, m%p, p))%p;
n /= p;
m /= p;
}
return ans;
} int main()
{
ll m, n; while(cin >> m >> n)
{
cout << lucas(m,n,) << endl; //这里的104729是比较大的一个素数
}
return ;
}

组合数模板 - Lucas的更多相关文章

  1. 求大的组合数模板 利用Lucas定理

    Lucas定理:A.B是非负整数,p是质数.A B写成p进制:A=a[n]a[n-1]…a[0],B=b[n]b[n-1]…b[0]. 则组合数C(A,B)与C(a[n],b[n])C(a[n-1], ...

  2. [UOJ 275/BZOJ4737] 【清华集训2016】组合数问题 (LUCAS定理的运用+数位DP)

    题面 传送门:UOJ Solution 这题的数位DP好蛋疼啊qwq 好吧,我们说回正题. 首先,我们先回忆一下LUCAS定理: \(C_n^m \equiv C_{n/p}^{m/p} \times ...

  3. 【算法学习笔记】组合数与 Lucas 定理

    卢卡斯定理是一个与组合数有关的数论定理,在算法竞赛中用于求组合数对某质数的模. 第一部分是博主的个人理解,第二部分为 Pecco 学长的介绍 第一部分 一般情况下,我们计算大组合数取模问题是用递推公式 ...

  4. 大组合数:Lucas定理

    最近碰到一题,问你求mod (p1*p2*p3*……*pl) ,其中n和m数据范围是1~1e18 , l ≤10 , pi ≤ 1e5为不同的质数,并保证M=p1*p2*p3*……*pl ≤ 1e18 ...

  5. HDU 6114 Chess【逆元+组合数】(组合数模板题)

    <题目链接> 题目大意: 車是中国象棋中的一种棋子,它能攻击同一行或同一列中没有其他棋子阻隔的棋子.一天,小度在棋盘上摆起了许多車……他想知道,在一共N×M个点的矩形棋盘中摆最多个数的車使 ...

  6. HDU 3037 组合数、lucas,逆元

    题目链接 题目大意,N颗树上取不超过M个果子,求总方案个数模P的值,P是质数且不超过10w,N,M不超过1e9: 在这里树是被认为不同的,也就是将k(0<=k<=M)个小球放入N个不同的盒 ...

  7. 洛谷P3726 [AH2017/HNOI2017]抛硬币(组合数+扩展Lucas)

    题面 传送门 题解 果然--扩展\(Lucas\)学了跟没学一样-- 我们先考虑\(a=b\)的情况,这种情况下每一个\(A\)胜的方案中\(A\)和\(B\)的所有位上一起取反一定是一个\(A\)败 ...

  8. 【NOI2019模拟2019.6.29】组合数(Lucas定理、数位dp)

    Description: p<=10且p是质数,n<=7,l,r<=1e18 题解: Lucas定理: \(C_{n}^m=C_{n~mod~p}^{m~mod~p}*C_{n/p} ...

  9. 模板 lucas

    void extend_gcd(ll a,ll &x,ll b,ll &y){ ){ x=,y=; return; } ll x1,y1; extend_gcd(b,x1,a%b,y1 ...

随机推荐

  1. 原型模式(Prototype Pattern)--对象的克隆

    定义:使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象; 原型类的核心在于如何实现克隆方法: 能够实现克隆的Java类必须实现一个标识接口Cloneable,表示这个类支持被复制; 通 ...

  2. LeetCode_Symmetric Tree

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...

  3. RESTful API 设计最佳实践【转】

    背景 目前互联网上充斥着大量的关于RESTful API(为了方便,后面API和RESTful API 一个意思)如何设计的文章,然而却没有一个“万能”的设计标准:如何鉴权?API格式如何?你的API ...

  4. SKBUFFER详解

    纯属转载,不敢侵犯别人产权!! 一. SKB_BUFF的基本概念1. 一个完整的skb buff组成(1) struct sk_buff--用于维护socket buffer状态和描述信息(2) he ...

  5. 爬虫之urllib包以及request模块和parse模块

    urllib简介 简介 Python3中将python2.7的urllib和urllib2两个包合并成了一个urllib库 Python3中,urllib库包含有四个模块: urllib.reques ...

  6. mysql 约束条件 auto_increment 自动增长 清空表 自动增长情况

    清空表情况: mysql> delete from t20; Query OK, rows affected (0.00 sec) mysql> show create table t20 ...

  7. Java数据类型(基本数据类型和引用数据类型)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/pengkv/article/details/37564869 Java数据分为基本数据类型和引用数据 ...

  8. oracle的字符集设置与乱码

    oracle的字符集设置与乱码 字符集问题一直叫人头疼,究其原因还是不能完全明白其运作原理. 在整个运行环节中,字符集在3个环节中发挥作用: 1.软件在操作系统上运作时的对用户的显示,此时采用操作系统 ...

  9. android 写入联系人

    public void testInsert() { ContentValues values = new ContentValues(); /* * 首先向RawContacts.CONTENT_U ...

  10. postgresql 建模文件 LDM 转成PDM 生成 SQL问题

    LDM 转成 PDM (Tool --- GPDM ) 生成 SQL,查看全部SQL 详细步骤见下图. 1.postgresql 没有 VARCHAR2 只有 VARCHAR. 2.LDM 生成 PD ...