hdoj 3037 lucas定理+逆元
2016-05-23 23:03
337 查看
求c(n+m,m)公式很好推
Lucas 当mod为质数 Lucas(n,m,p)=cm(n%p,m%p)* Lucas(n/p,m/p,p)
Lucas(x,0,p)=1;
Lucas 当mod为质数 Lucas(n,m,p)=cm(n%p,m%p)* Lucas(n/p,m/p,p)
Lucas(x,0,p)=1;
#include<cstdio> #define LL long long LL f[100005]; void init(LL n) { f[0] = 1; for(int i=1;i<=n;i++) { f[i] = f[i-1]*i; f[i]%=n; } } int inv(LL i,int mod) { if(i==1)return 1; else return inv((mod%i),mod)%mod*(mod-mod/i)%mod; } LL lucas(int n,int m,int mod) { LL ans = 1; while(n&&m) { LL a = n%mod,b = m%mod; if(a<b)return 0; ans*=f[a]%mod*inv(f[b]*f[a-b]%mod,mod)%mod; ans%=mod; n/=mod; m/=mod; } return ans; } int main() { int n,m,p,t; scanf("%d",&t); while(t--) { scanf("%d%d%d",&n,&m,&p); init(p); printf("%I64d\n",lucas(n+m,m,p)); } return 0; }
相关文章推荐
- c++作业6-项目2,3
- Android ViewPager 如何显示大量图片
- LeetCode OJ 34. Search for a Range
- linux下redis数据库的简单使用
- Linux(Ubuntu14.04)下安装Anaconda和Spyder
- 策略模式-JAVA
- C#与C++交互的一些基础
- Drawerlayout Toolbar
- List去重 (下)
- c++单例模式
- Hibernate主配置文件Hibernate.cfg.xml主要属性解释
- Jsp基础
- leetcode_c++:Rotate Image(048)
- 5、Struts2自定义拦截器
- android getWidth/getMeasuredWidth
- Redis快速入门
- Java 垃圾收集
- Java高级开发工程师面试考纲
- OSG绘制几何体学习总结(超全)
- php的数据类型与源码调试