lucas定理 FOJ 2020 组合
Accept: 886 Submit: 2084
Time Limit: 1000 mSec Memory Limit : 32768
KB
Problem Description
Input
Output
Sample Input
Sample Output
#include<iostream>
using namespace std;
#include<cstdio>
#define ll long long
int t;
ll quick_mod(ll a,ll b,ll p)// a^b%p
{
a%=p;
ll ans=;
while(b)
{
if(b&)
{
b--;
ans=(ans*a)%p;
}
b>>=;
a=(a*a)%p;
}
return ans;
}
ll C(ll n, ll m,ll p)
{
if(m>n) return ;
ll ans=,a,b;
for(int i=;i<=m;++i)
{
a=(n+i-m)%p;
b=i%p;
ans=ans*(a*quick_mod(b,p-,p)%p)%p;
}
return ans;
}
ll lucas(ll n,ll m,ll p)
{
if(m==) return ;
return (lucas(n/p,m/p,p)*C(n%p,m%p,p))%p;
}
int main()
{
scanf("%d",&t);
while(t--)
{
ll n,m,p;
cin>>n>>m>>p;
cout<<lucas(n,m,p)<<endl;
}
return ;
}
预处理阶乘(有时可以加快速度,相乘时也要防止溢出):
/*事实上,这道题目预处理阶乘,反而会更慢,因为题目中n,m都是10^9,预处理已经接近超时了*/
#include<iostream>
using namespace std;
#include<cstdio>
#define S 10000000
#define ll long long
int t;
long long f[];
void yuchuli(ll p)
{
f[]=;
for(int i=;i<=S;++i)
f[i]=f[i-]*i%p;
}
ll quick_mod(ll a,ll b,ll p)
{
a%=p;
ll ans=;
while(b)
{
if(b&)
{
b--;
ans=(ans*a)%p;
}
b>>=;
a=(a*a)%p;
}
return ans;
}
ll C(ll n, ll m,ll p)
{
if(m>n) return ;
return (f[n]*quick(f[m]*f[n-m],p-,p))%p;
}
ll lucas(ll n,ll m,ll p)
{
if(m==) return ;
return (lucas(n/p,m/p,p)*C(n%p,m%p,p))%p;
}
int main()
{
scanf("%d",&t);
while(t--)
{
ll n,m,p;
cin>>n>>m>>p;
cout<<lucas(n,m,p)<<endl;
}
return ;
}
lucas定理 FOJ 2020 组合的更多相关文章
- 『Lucas定理以及拓展Lucas』
Lucas定理 在『组合数学基础』中,我们已经提出了\(Lucas\)定理,并给出了\(Lucas\)定理的证明,本文仅将简单回顾,并给出代码. \(Lucas\)定理:当\(p\)为质数时,\(C_ ...
- FZU 2020 组合 (Lucas定理)
题意:中文题. 析:直接运用Lucas定理即可.但是FZU好奇怪啊,我开个常数都CE,弄的工CE了十几次,在vj上还不显示. 代码如下: #pragma comment(linker, "/ ...
- Problem 2020 组合(FOJ)
Problem 2020 组合 Accept: 714 Submit: 1724Time Limit: 1000 mSec Memory Limit : 32768 KB Problem ...
- Bzoj 4591: [Shoi2015]超能粒子炮·改 数论,Lucas定理,排列组合
4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 178 Solved: 70[Submit][Stat ...
- 快速求排列组合 lucas定理
对于C(n, m) mod p.这里的n,m,p(p为素数)都很大的情况. 就不能再用C(n, m) = C(n - 1,m) + C(n - 1, m - 1)的公式递推了. 一般lucas定理的p ...
- 【BZOJ4591】超能粒子炮·改(Lucas定理,组合计数)
题意: 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加 强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威力上有了本质的提 ...
- 【BZOJ4403】序列统计(Lucas定理,组合计数)
题意:给定三个正整数N.L和R, 统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量. 输出答案对10^6+3取模的结果. 对于100%的数据,1≤N,L,R≤10^9,1≤T≤100, ...
- [bzoj4591][Shoi2015][超能粒子炮·改] (lucas定理+组合计数)
Description 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加 强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威 ...
- CPC23-4-K. 喵喵的神数 (数论 Lucas定理)
喵喵的神∙数 Time Limit: 1 Sec Memory Limit: 128 MB Description 喵喵对组合数比較感兴趣,而且对计算组合数很在行. 同一时候为了追求有后宫的素养的生活 ...
随机推荐
- MSSQL 基础知识002
---启用sa账号 1. 先使用一个windows账号登陆. 2.在数据库实例上面右键,属性,安全性,登录名,sa. 右键,属性. 常规,修改sa的密码. 状态,启用sa账号. 主键的作用: 1.唯一 ...
- 设计模式之Composite
设计模式总共有23种模式这仅仅是为了一个目的:解耦+解耦+解耦...(高内聚低耦合满足开闭原则) Composite定义? 将对象以树形结构组织起来,以达成“部分-整体” 的层次结构. 想到Compo ...
- 贪心算法_01背包问题_Java实现
原文地址:http://blog.csdn.net/ljmingcom304/article/details/50310789 本文出自:[梁敬明的博客] 1.贪心算法 什么是贪心算法?是指在对问题进 ...
- Python3 断言
#!/usr/bin/env python # _*_ coding:utf-8 _*_ # Author:CarsonLi ''' 断言一般用于后面有非常重要的操作,需要使用前面的数据,而且不容许出 ...
- MySQL5.6 新特性之GTID【转】
转自 MySQL5.6 新特性之GTID - jyzhou - 博客园http://www.cnblogs.com/zhoujinyi/p/4717951.html 背景: MySQL5.6在5.5的 ...
- Redis使用详细教程【转】
转自 Redis使用详细教程 - wangyuyu - 博客园http://www.cnblogs.com/wangyuyu/p/3786236.html 一.Redis基础部分: 1.redis介绍 ...
- BZOJ 1975: [Sdoi2010]魔法猪学院——K短路,A*
传送门 http://www.lydsy.com/JudgeOnline/problem.php?id=1975 题意&简要做法 一张有向图,求出最多的互不相同的路径,满足路径长度之和\(\l ...
- win10产品密钥 win10专业版激活码key
转载地址:http://www.xitongcheng.com/jiaocheng/xtazjc_article_35407.html https://blog.csdn.net/WangJianku ...
- ASP.NET Core 2.0 MVC 发布部署--------- ASP.NET Core 发布的具体操作
ASP.NET Core 发布的具体操作 下面使用C# 编写的ASP.NET Core Web项目示例说明发布的全过程. 1.创建项目 选择“文件” > “新建” > “项目”. 在“添加 ...
- mysql军规
总是在灾难发生后,才想起容灾的重要性.总是在吃过亏后,才记得曾经有人提醒过. 一,核心军规 不在数据库做计算,cpu计算务必移至业务层 控制单表数据量,单表记录控制在千万级 控制列数量,字段数控制在2 ...