zoukankan      html  css  js  c++  java
  • bzoj2982 combination——卢卡斯定理

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2982

    卢卡斯定理裸题;

    原准备1A来着,结果输出忘了加回车!

    预处理阶乘或者现求都可以,感觉学到了一种现求 C 的写法呢。

    代码如下:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    typedef long long ll;
    int T,n,m,mod=10007;
    ll fac[10010];
    void init()
    {
        fac[0]=1;
        for(int i=1;i<=mod;i++)
            fac[i]=(fac[i-1]*i)%mod;
    }
    ll pw(ll a,int b)
    {
        ll ret=1;
        for(;b;b>>=1,a=(a*a)%mod)
            if(b&1)ret=(ret*a)%mod;
        return ret;
    }
    int C(int n,int m)
    {
        if(n<m)return 0;//
        return (fac[n]*(pw((ll)fac[m]*fac[n-m],mod-2)%mod))%mod;
    }
    //int C(int n,int m)
    //{
    //    if(n<m)return 0;
    //    m=min(m,n-m);//
    //    int a=1,b=1;
    //    for(int i=n-m+1;i<=n;i++)a=(a*i)%mod;
    //    for(int i=1;i<=m;i++)b=(b*i)%mod;
    //    return (a*pw(b,mod-2))%mod;
    //}
    int Lucas(int n,int m)
    {
        if(m==0)return 1;
        return (C(n%mod,m%mod)*Lucas(n/mod,m/mod))%mod;
    }
    int main()
    {
        init();
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&n,&m);
            printf("%d
    ",Lucas(n,m)%mod);
        }
        return 0;
    }
  • 相关阅读:
    linux 第五天
    linux 第四天
    二进制 位运算
    二进制
    java 方法的调用过程
    Linux 第三天
    Linux 第二天
    Linux
    学习了半个多月的TankGame
    学习第一天(spring)
  • 原文地址:https://www.cnblogs.com/Zinn/p/9260695.html
Copyright © 2011-2022 走看看