• 【luogu P3807 卢卡斯定理】 模板


    题目链接:https://www.luogu.org/problemnew/show/P3807

    Lucas定理用来求大组合数对一个质数取模的值,不大于10^5用逆元,大于10^5就用Lucas转化成10^5以内,如果不是质数还要用扩展Lucas

    Lucas(n,m,p) = C(n%p,m%p)*Lucas(n/p,m/p,p)

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <algorithm>
     4 using namespace std;
     5 const int maxn = 100010;
     6 int n, m, p, T;
     7 long long a[maxn], b[maxn];
     8 long long Lucas(int n, int m, int p)
     9 {
    10     if(n < m) return 0;
    11     else if(n < p) return b[n]*a[m]*a[n-m]%p;
    12     else return Lucas(n%p,m%p,p)*Lucas(n/p,m/p,p)%p;
    13 }
    14 int main()
    15 {
    16     scanf("%d",&T);
    17     while(T--)
    18     {
    19         scanf("%d%d%d",&n,&m,&p);
    20         a[0] = 1, a[1] = 1, b[0] = 1, b[1] = 1;
    21         for(int i = 2; i <= m+n; i++) b[i] = b[i-1]*i%p;
    22         for(int i = 2; i <= m+n; i++) a[i] = (p-p/i)*a[p%i]%p;
    23         for(int i = 2; i <= m+n; i++) a[i] = a[i-1]*a[i]%p;
    24         printf("%lld
    ",Lucas(n+m,m,p));
    25     }
    26     return 0;
    27 }

    隐约雷鸣,阴霾天空,但盼风雨来,能留你在此。

    隐约雷鸣,阴霾天空,即使天无雨,我亦留此地。

  • 相关阅读:
    《构建之法阅读笔记02》
    《人月神话阅读笔记01》
    第四周学习进度条
    子数组2
    敏捷开发方法综述
    子数组1
    第三周学习进度条
    四则运算3
    第二周学习进度条
    四则运算4
  • 原文地址:https://www.cnblogs.com/MisakaAzusa/p/9060446.html
Copyright © 2020-2023  润新知