Advertisement

AcWing 888 求组合数(IV)题解

阅读量:
在这里插入图片描述

首先计算所有小于a的质数,接着分别统计a、b以及(a - b)的阶乘中各质数出现的次数,通过将get(a)减去get(b)再减去get(a - b),即可获得组合数中各质数的出现次数,之后借助大整数乘法,将这些质数按照对应的次数相乘,最终得到结果。

复制代码
    #include<iostream>
    #include<algorithm>
    #include<vector>
    
    using namespace std;
    
    const int N = 5010;
    
    int prime[N], cnt;//记录质数和质数的个数
    bool st[N];//记录一个数是不是质数
    int sum[N];//记录一个质数在组合数中的次数
    
    void get_prime(int n){//欧拉筛
    for(int i = 2; i <= n; i ++ ){
        if(!st[i]){
            st[i] = true;
            prime[c

全部评论 (0)

还没有任何评论哟~