zoukankan      html  css  js  c++  java
  • hdu3037Saving Beans——卢卡斯定理

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3037

    卢卡斯定理模板——大组合数的取模

    代码如下:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    long long t,n,m,p,a[100005];
    long long qpow(long long x,long long y)
    {
    	if(y==0)return 1;
    	long long ans=1;
    	while(y>0)
    	{
    		if(y%2)ans=ans*x%p;//不能是ans*=x%p; 
    		y/=2;
    		x=x*x%p;
    	}
    	return ans;
    }
    long long getc(long long n,long long m)
    {
    	if(n<m)return 0;
    	if(m>n-m)m=n-m;
    	long long s1=1,s2=1;
    	for(int i=1;i<=m;i++)
    	{
    		s2=s2*i%p;
    		s1=s1*(n-i+1)%p;
    	}
    	return s1*qpow(s2,p-2)%p;
    //	return (a[n]*qpow(a[m],p-2))%p*qpow(a[n-m],p-2)%p;
    }
    long long lucas(long long n,long long m)
    {
    	if(m==0)return 1;
    	return getc(n%p,m%p)*lucas(n/p,m/p)%p;
    }
    int main()
    {
    	scanf("%lld",&t);
    	while(t--)
    	{
    		scanf("%lld%lld%lld",&n,&m,&p);
    //		a[0]=1;
    //		for(int i=1;i<=p;i++)
    //			a[i]=a[i-1]*i%p;
    		printf("%lld
    ",lucas(n+m,n)%p);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    Beta 冲刺(1/7)
    福大软工 · 第十次作业
    11111111
    101
    7
    6
    5
    4
    p
    b2
  • 原文地址:https://www.cnblogs.com/Zinn/p/8276653.html
Copyright © 2011-2022 走看看