美文网首页
大数C(n,m)模板+素数+素数因子p的指数+快速幂

大数C(n,m)模板+素数+素数因子p的指数+快速幂

作者: _弓长_大人 | 来源:发表于2018-09-25 12:44 被阅读4次
#include <iostream>
#include <vector>
using namespace std;
#define Mod 1000000009
typedef long long ll;
//  计算n以内所有的质数
vector<int> primelessthanN(int n)
{
    vector<bool> isprime(n+1, true);
    vector<int> prime;
    prime.push_back(2);
    int i;
    for(i=3; i*i<=n; i+=2)
    {
        if(isprime[i])
        {
            prime.push_back(i);
            for(int j=i*i; j<=n; j+=i)
                isprime[j]=false;
        }
    }
    while(i<=n)
    {
        if(isprime[i])
            prime.push_back(i);
        i+=2;
    }
    return prime;
}
//  计算素数因子p的指数
int Cal(int n, int p)
{
    int res=0;
    ll rec=p;
    while((ll)n>=rec)
    {
        res+=(int)((ll)n/rec);
        rec*=(ll)p;
    }
    return res;
}
//  计算n^k对Mod取余
ll PowerMod(int n, int k)
{
    int t(k),n0(n);
    ll res=(ll)1;
    while(t)
    {
        if(t&1)
            res=(res*(ll)n0)%Mod;
        n0=(n0*n0)%Mod;
        t>>=1;
    }
    return res;
}
//  计算C(n,m),即原式的C(n+m,m)
ll Cnm(int n, int m)
{
    vector<int> prime=primelessthanN(n);
    ll res=1;
    for(int i=0; i<prime.size(); i++)
    {
        res=(res*(PowerMod(prime[i],Cal(n,prime[i])-Cal(n-m,prime[i])-Cal(m,prime[i]))))%Mod;
    }
    return res;
}
//  main函数
int main()
{
    int n,m;
    int t;
    cin>>t;
    while(t--)
    {

    cin >> n >> m;
    int nn=max(n,m);
    int mm=min(n,m);
    cout << Cnm(nn,mm) << endl;
    }
    //system("pause");
    return 0;
}

相关文章

  • 大数C(n,m)模板+素数+素数因子p的指数+快速幂

  • 1013 数素数

    令 P​i表示第 i 个素数。现任给两个正整数 M≤N≤10​^4,请输出 P​M到 P​N的所有素数。 输入格式...

  • 1013 数素数 (20分)(Python)

    令 P​i表示第 i 个素数。现任给两个正整数 M≤N≤10^4,请输出 P​M到 PN的所有素数。 输入格式: ...

  • 【python吉比特】求素数?

    题目:输入M、N,1 < M < N < 1000000,求区间[M,N]内的所有素数的个数。素数定义:除了1以外...

  • 寻找第n个默尼森数

    找第n个默尼森数。P是素数且M也是素数,并且满足等式M=2P-1,则称M为默尼森数。例如,P=5,M=2P-1=3...

  • 小练习-默尼森数

    找第n个默尼森数。P是素数且M也是素数,并且满足等式M=2P-1,则称M为默尼森数。例如,P=5,M=2P-1=3...

  • 寻找第n个默尼森数

    经典程序设计问题:找第n个默尼森数。P是素数且M也是素数,并且满足等式M=2P-1,则称M为默尼森数。例如,P=5...

  • 1013数素数

    问题描述:令 Pi表示第 i 个素数。现任给两个正整数 M≤N≤10^4,请输出 P​M到 PN的所有素数。 输入...

  • C语言实现 PTA 1013 数素数

    令 Pi表示第 i 个素数。现任给两个正整数 M≤N≤10^4,请输出 P​M到 PN的所有素数。 输入格式: 输...

  • RSA

    P 第一个素数Q 第二个素数E 公钥N 公用模数 N = P * QD 私钥 ...

网友评论

      本文标题:大数C(n,m)模板+素数+素数因子p的指数+快速幂

      本文链接:https://www.haomeiwen.com/subject/banyrxtx.html