zoukankan      html  css  js  c++  java
  • HDU 3037 Saving Beans(Lucas定理的直接应用)

    解题思路:

    直接求C(n+m , m) % p , 由于n , m ,p都非常大,所以要用Lucas定理来解决大组合数取模的问题。

    #include <string.h>
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <set>
    #include <map>
    #include <string>
    #include <math.h>
    #include <cstdio>
    #include <stdlib.h>
    #include <time.h>
    #include <assert.h>
    #define LL long long
    #define FOR(i, x, y) for(int i=x;i<=y;i++)
    using namespace std;
    const int maxn = 100000 + 10;
    LL Pow_mod(LL a, LL b, LL mod)
    {
    	LL ret = 1;
    	while(b)
    	{
    		if(b & 1) ret = ret * a % mod;
    		a = a * a % mod;
    		b >>= 1;
    	}
    	return ret;
    }
    LL fac[maxn];
    void init(LL p)
    {
    	fac[0] = 1;
    	FOR(i, 1, p) fac[i] = (fac[i-1] * i) % p;
    }
    LL Lucas(LL n, LL m, LL p)
    {
    	LL ret = 1;
    	while(n && m)
    	{
    		LL a = n % p, b = m % p;
    		if(a < b) return 0;
    		ret = (ret * fac[a] * Pow_mod(fac[b] * fac[a-b] % p , p - 2 , p)) % p;
    		n /= p, m /= p;
    	}
    	return ret;
    }
    int main()
    {
    	int T;
    	scanf("%d",&T);
    	while(T--)
    	{
    		int n, m, p;
    		scanf("%d%d%d", &n, &m, &p);
    		init(p);
    		printf("%d
    ", (int)Lucas(n + m, m, p));
    	}
    	return 0;
    }
    

  • 相关阅读:
    Python--安装 pip 和 scapy
    windows设置代理
    麦子的《我奋斗了18年才和你坐在一起喝咖啡》
    Tar命令
    test
    markdown语法
    js apply call
    windows文件大小和占用空间为何不一样
    prolog笔记
    html文字超出显示省略号
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5207555.html
Copyright © 2011-2022 走看看