洛谷 P3834 卢卡斯定理 题解
2024-10-01 11:01:56
首先你需要知道这条定理:
C(n,m)=C(n%p,m%p)*C(n/p,m/p);
这样可以递归实现;
注意坑点:是C(n+m,m),并不是C(n,m);
#include <bits/stdc++.h>
using namespace std;
long long n,m,p;
inline long long KSM(long long a,long long b)
{
long long res=;
while(b){
if(b&) res=res*a%p;
a=a*a%p;
b/=;
}
return res%p;
}
long long C(long long n,long long m)
{
if(n<m) return ; //并不是返回1;
long long res1=,res2=;
for(register int i=(n-m+);i<=n;i++){
res1=res1*i%p;
}
for(register int i=;i<=m;i++){
res2=res2*i%p;
}
return res1*KSM(res2,p-)%p;
}
long long LUCAS(long long n,long long m)
{
if(m==){
return ;
}
return C(n%p,m%p)*LUCAS(n/p,m/p)%p;
}
int main ()
{
int t;
cin>>t;
while(t--)
{
cin>>n>>m>>p;
cout<<LUCAS(n+m,m)<<endl;
}
}
最新文章
- 菜鸟学Struts2——Actions
- .NET平台开发Mongo基础知识
- cakePHP的controller回调
- java nio 网络框架实现
- android:ToolBar详解(手把手教程)
- 越狱后想禁用Spotlight
- c 深度剖析 4
- View的个得区域函数getHitRect,getDrawingRect,getLocalVisibleRect,getGlobalVisibleRect(*)
- ASP.NET页面同时发起多个ajax请求,出现阻塞情况
- AutoMapper在asp.netcore中的使用
- LJN数理化生信奥队自传
- centos 7添加硬盘及LVM扩容
- NotSupportedError Only secure origins are allowed
- Confluence 6 关于统一插件管理器
- 2_Linux操作系统和基础命令行
- JS学习笔记5_DOM
- To 初识Java的小菜菜们 嘻嘻~
- forms身份认证仍然能访问html页面解决办法
- 在UML系统开发中有三个主要的模型
- js模板引擎-art-template常用