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 喵喵对组合数比較感兴趣,而且对计算组合数很在行. 同一时候为了追求有后宫的素养的生活 ...
随机推荐
- python3爬虫.4.下载煎蛋网妹子图
开始我学习爬虫的目标 ----> 煎蛋网 通过设置User-Agent获取网页,发现本该是图片链接的地方被一个js函数代替了 于是全局搜索到该函数 function jandan_load_im ...
- stanfordCorenlp在python3中的安装使用+词性学习
1 安装 前言 Stanford CoreNLP的源代码是使用Java写的,提供了Server方式进行交互.stanfordcorenlp是一个对Stanford CoreNLP进行了封装的Pytho ...
- jplayer.js 与 video.js
HTML5 - 两款基于JS的视频播放器 都是基于h5 video 标签,如果不支持则会自动转成flash,这里个人比较推荐使用jplayer; 1.video.js pc端有时候会与视频打交道,如果 ...
- java基础14 多态(及关键字:instanceof)
面向对象的三大特征: 1.封装 (将一类属性封装起来,并提供set()和get()方法给其他对象设置和获取值.或者是将一个运算方法封装起来,其他对象需要此种做运算时,给此对象调用) 2.继承 ...
- sql函数应用例子
select p.province, data.existUserCount, data.addUserCount, data.cancelUserCount, data.threedayCancel ...
- meta标签的使用方法(PC端)
<!DOCTYPE html> <html lang="en"> <head> <!--设定页面使用的字符集--> <meta ...
- mysql数据库和oracle数据库之间互相导入备份
把从Oracle数据库导出的数据导入到MySql数据库中1. 使用默认的结束符号导入到MySql数据库中: LOAD DATA LOCAL INFILE 'd:/oracle.txt' IGNO ...
- Hadoop(四)HDFS的高级API操作
一 HDFS客户端环境准备 1.1 jar包准备 1)解压hadoop-2.7.6.tar.gz到非中文目录 2)进入share文件夹,查找所有jar包,并把jar包拷贝到_lib文件夹下 3)在全部 ...
- 如何在 JavaScript 中检查字符串是否包含子字符串?
如何在 JavaScript 中检查字符串是否包含子字符串? // var test4 = _.includes(string, substring); 该方法需要此文件 <script src ...
- docker export import后,导入镜像,启动时的错误,Error response from daemon: No command specified
Docker的流行与它对容器的易分享和易移植密不可分,用户不仅可以把容器提交到公共服务器上,还可以把容器导出到本地文件系统中.同样,我们也可以把导出的容器重新导入到Docker运行环境中.Docker ...