zoukankan      html  css  js  c++  java
  • lucas定理板子

    luogu P3807 【模板】卢卡斯定理

    题目背景

    这是一道模板题。

    题目描述

    给定n,m,p(1≤ n,m,p≤ 10)

    求 C(n+m,m​) mod p

    保证P为prime

    C表示组合数。

    一个测试点内包含多组数据。

    输入输出格式

    输入格式:

     

    第一行一个整数T(T10),表示数据组数

    第二行开始共T行,每行三个数n m p,意义如上

     

    输出格式:

     

    共T行,每行一个整数表示答案。

     

    输入输出样例

    输入样例#1: 复制
    2
    1 2 5
    2 1 5
    输出样例#1: 复制
    3
    3
    AC代码
    #include<cstdio>
    #include<iostream> 
    #include<vector>
    #include<algorithm>
    #include<cmath>
    #define BIG 100011 
    #define ll long long
    #define FOR(i,s,t) for(register int i=s;i<=t;++i)
    using namespace std;
    ll fac[BIG];
    int n,m,p;
    inline ll fp(int a,int b){
    	if(b==1)
    		return a;
    	if(b==0)
    		return 1;
    	ll ans=fp(a,b>>1);
    	ans=ans*ans%p;
    	return b&1?ans*a%p:ans;
    }
    inline ll getc(int n,int m){
    	return m<n?0:fac[m]*fp(fac[n],p-2)%p*fp(fac[m-n],p-2)%p;
    }
    inline ll lucas(int n,int m,int p){
    	return m?getc(n%p,m%p)*lucas(n/p,m/p,p)%p:1;
    }
    int T;
    int main(){
    	fac[0]=1ll;
    	scanf("%d",&T);
    	while(T--){
    		scanf("%d%d%d",&n,&m,&p);
    		FOR(i,1,p-1)
    			fac[i]=fac[i-1]*i%p;
    		printf("%lld
    ",lucas(m,n+m,p));
    	}
    	return 0;
    } 
    

      

     
  • 相关阅读:
    arrayObj.splice(start, deleteCount, [item1[, item2[, . . . [,itemN]]]])
    运算符 ||
    ajax 本地测试,使用Chrome 浏览器
    js set
    js get 传参 汉字 乱码问题
    删除对象中的key
    html 返回页面顶部
    js 设置回车事件
    盘面,盘口
    ST股
  • 原文地址:https://www.cnblogs.com/Stump/p/7715654.html
Copyright © 2011-2022 走看看