HDU 5407

题意 : 给你一个 N 求 C(N,1 to N ) 的LCM;

有定理: (不会推)

g (n ) = C(N,1 to N ) 的LCM,

f  (n  )   = Lcm ( 1, to  n)

g ( n ) = f(n + 1 ) / ( n + 1 );

f ( n ) =  f (n –1 ) * p  (( if  n 为 质数 p 的k 次方数)

or  = f (n – 1 );

根据上式就可以很快得出 g (n )了;

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn = 1e6 +131;
const ll  mod = 1e9 + 7;
int Prime[maxn];
bool Jug[maxn];
int Cnt;
void Make()
{
    Cnt = 0;
    for(int i = 2; i < maxn; ++i)
    {
        if(Jug[i] == false)
        {
            Prime[Cnt++] = i;
            for(int j = i; j < maxn; j += i)
                Jug[j] = true;
        }
    }
}

ll Fun[maxn];
void MK()
{
    Fun[1] = 1;
    for(int i = 2; i < maxn; ++i)
    {
        int tmp = i;
        bool jj = true;
        for(int j = 0; j <Cnt && Prime[j] <= tmp; ++j)
        {
            if(tmp % Prime[j] == 0)
            {
                while(tmp % Prime[j] == 0) tmp /= Prime[j];
                if(tmp > 1) jj = false;
                break;
            }
        }
        if(jj) Fun[i] = Fun[i-1] * i % mod;
        else Fun[i] = Fun[i-1];
    }
}

ll ppow(ll a, ll b)
{
    ll ret = 1;
    while(b)
    {
        if(b & 1) ret = ret * a % mod;
        a = a * a % mod;
        b >>= 1;
    }
    return ret;
}

int main()
{
    Make();
    //MK();
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n;
        scanf("%d",&n);
        ll ans = 1;
        for(int i = 0; i < Cnt && Prime[i] <= n; ++i)
        {
            ll tmp = Prime[i];
            while(tmp <= n)
            {
                if((n+1) % tmp != 0)
                    ans = ans * Prime[i] % mod;
                tmp = tmp * Prime[i];
            }
        }
        printf("%lld\n",ans);
    }
    return 0;
}
时间: 2024-11-05 06:25:10

HDU 5407的相关文章

Hdu 5407 CRB and Candies (找规律)

题目链接: Hdu 5407 CRB and Candies 题目描述: 给出一个数n,求lcm(C(n,0),C[n,1],C[n-2]......C[n][n-2],C[n][n-1],C[n][n])%(1e9+7)是多少? 解题思路: 刚开始的时候各种开脑洞,然后卡题卡的风生水起.最后就上了数列查询这个神奇的网站,竟然被我找到了!!!!就是把题目上给的问题转化为求lcm(1, 2, 3, 4 ...... n-2, n-1, n, n-1) / (n+1),扎扎就打了两个表一个lcm[n

hdu 5407 CRB and Candies(素数筛选法,除法取模(乘法逆元))

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5407 解题思路: 官方题解: The problem is just to calculate g(N) =\ LCM(C(N,0), C(N,1), ..., C(N, N))g(N) = LCM(C(N,0),C(N,1),...,C(N,N)). Introducing function f(n) =\ LCM(1, 2, ..., n)f(n) = LCM(1,2,...,n), the

【多校10】HDU 5407 5410 5411 5414 5416

最后一场多校,记录一下... 最近一个月听周的<晴天>听疯了..单曲循环一千万次- -! 这场是朝鲜金策工业大学出的题,感受到了完全不同的画风..有两点印象深刻 第一,题目描述不拖泥带水,非常清晰,可读性好,题目表述非常简洁.感觉就应该这样啊,,见过太多题目强行加入一个奇怪的故事背景,搞啥?自认为增加了趣味性,其实适得其反..这一点真是值得学习. 第二,标程写得很棒,想说,这种风格调教出来的代码才是给别人看的好么– HDU5407 CRB and Candies 求 LCM((n0),(n1)

【LCM从1-n】 HDU 5407 CRB and Candies

通道 题意:计算C(n,0)+...C(n,n) 思路:转化为LCM(1...n)/ n 代码: #include <cstdio> #include <bitset> using namespace std; typedef long long ll; const int N = 1000000+2; const ll MOD = (ll)1e9 + 7; ll vis[(N+31)/32 + 5]; int pri[5770000], pnum; ll sum[5770000]

HDU 5407 CRB and Candies(LCM +最大素因子求逆元)

[题目链接]click here~~ [题目大意]求LCM(Cn0,Cn1,Cn2....Cnn)%MOD 的值 [思路]来图更直观: 这个究竟是怎样推出的,说实话.本人数学归纳大法没有推出来,幸得一个大神给定愿文具体证明,点击这里:click here~~ 代码: #include <bits/stdc++.h> using namespace std; const int N=1e6+10; const int MOD=1e9+7; typedef long long LL; LL p[N

HDU 5407——CRB and Candies——————【逆元+是素数次方的数+公式】

CRB and Candies Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 722    Accepted Submission(s): 361 Problem Description CRB has N different candies. He is going to eat K candies.He wonders how ma

HDU 5407 CRB and Candies

传送门 http://oeis.org/A002944 http://oeis.org/A003418 令an=LCM(C(n,0),C(n,1),C(n,2),...,C(n,n)) bn=LCM(1,2,3,...,n) an=bn+1n+1 if (n=pk)bn=p?bn?1elsebn=bn?1 #include <bits/stdc++.h> using namespace std; #define prt(k) cerr<<#k" = "<&

hdu 5407 CRB and Candies(组合数+最小公倍数+素数表+逆元)暨2015暑期多校赛第10场

题意: 输入n,求c(n,0)到c(n,n)的所有组合数的最小公倍数. 输入: 首行输入整数t,表示共有t组测试样例. 每组测试样例包含一个正整数n(1<=n<=1e6). 输出: 输出结果(mod 1e9+7). 感觉蛮变态的,从比赛开始我就是写的这道题,比赛结束还是没写出来…… 期间找到了逆元,最小公倍数,组合数的各种公式,但是爆了一下午tle. 比赛结束,题解告诉我,公式秒杀法…… 但是公式看不懂,幸好有群巨解说,所以有些听懂了,但还是需要继续思考才能弄懂. 题解: 设ans[i]表示i

HDU 5407 CRB and Candies (2015年多校比赛第10场)

1.题目描述:点击打开链接 2.解题思路:本题要求LCM(C(n,0), C(n,1),..., C(n,n)),官方题解是转化为求解LCM(1,2,3,...n+1)/(n+1),然而这种做法还是觉得太陌生,不妨试着用学过的唯一分解定理去做. 首先,求这n+1个数的LCM,实际上就是求所有小于n的素数中,对于每一个素数Pi,哪一项的指数最大,然后把他们连乘起来即可得到LCM值.因此,问题转化为确定每一个pi的最大指数.这里要用到Kummer定理来解决,Kummer定理告诉我们这样一个事实:p恰