CRB and Candies (组合的LCM)

来源:互联网 发布:淘宝店铺商品被删除 编辑:程序博客网 时间:2024/05/22 23:45


组合数的lcm:

C(n,0) ,C(n,1),C(n,2)……C(n,n)lcm1,2,……,n,n+1lcm除以n+1,其中1--(n + 1)lcm可以考虑是每一个质数的最大幂,只有当单独一个数形成数的时候,幂最大。


#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int> P;#define fi first#define se second#define INF 0x3f3f3f3f#define clr(x,y) memset(x,y,sizeof x)#define PI acos(-1.0)#define ITER set<int>::iteratorconst int Mod = 1e9 + 7;const int maxn = 1000000 + 10;bool is_[maxn];int prime[maxn];int len = 0;void Init(){    clr(is_,true);    for(int i = 2; i < maxn; i ++)    {        if(is_[i])        {            prime[len ++] = i;            for(int j = i * 2; j < maxn; j += i)                is_[j] = false;        }    }}ll pows(ll x,ll n){    ll ret = 1;    while(n)    {        if(n & 1)ret = ret * x % Mod;        x = x * x % Mod;n >>= 1;    }    return ret;}int main(){    Init();int n;int Tcase;scanf("%d",&Tcase);    while(Tcase --)    {        scanf("%d",&n);ll ans = 1;n ++;        for(int i = 0; i < len && prime[i] <= n; i ++)        {            int t = 0;ll temp = 1;            while(temp * prime[i] <= n){temp *= prime[i];t ++;}            ans = ans * temp % Mod;        }        printf("%I64d\n",ans * pows(n,Mod - 2) % Mod);    }    return 0;}


原创粉丝点击