关闭

hdu 5407 CRB and Candies(数论,LCM,快速幂取模,求逆元)

标签: ACMHDU数学数论
289人阅读 评论(0) 收藏 举报
分类:

CRB and Candies

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 947    Accepted Submission(s): 442


Problem Description
CRB has N different candies. He is going to eat K candies.
He wonders how many combinations he can select.
Can you answer his question for all K(0 ≤ K ≤ N)?
CRB is too hungry to check all of your answers one by one, so he only asks least common multiple(LCM) of all answers.
 

Input
There are multiple test cases. The first line of input contains an integer T, indicating the number of test cases. For each test case there is one line containing a single integer N.
1 ≤ T ≤ 300
1 ≤ N ≤ 106
 

Output
For each test case, output a single integer – LCM modulo 1000000007(109+7).
 

Sample Input
5 1 2 3 4 5
 

Sample Output
1 2 3 12 10
题意:求LCM(C(0,n),C(1,n)...,C(n,n))

思路:我也不知道怎么来的公式反正直接用就是了。证明过程来自 http://arxiv.org/pdf/0906.2295v2.pdf  因为是英文的能看懂就看吧

结论就是:

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=pbn1elsebn=bn1 

所以用素数筛选求出所有n可由单个质因子累乘的数即可。然后用欧拉定理或者乘法逆元求n+1的逆元

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
#define N 1000100
#define LL long long
LL mod=1000000007;
LL notprime[N],prime[N];
LL dp[N];
void init()
{
    for(LL i=2; i*i<N; i++)
    {
        if(!notprime[i])
        {
            for(LL j=i; j<N; j*=i)
                prime[j]=i;
            for(LL j=i*i; j<N; j+=i)
                notprime[j]=1;
        }
    }
    dp[1]=1;
    for(int i=2; i<=N; i++)
        if(prime[i])
            dp[i]=dp[i-1]*prime[i]%mod;
        else if(!notprime[i]) dp[i]=dp[i-1]*i%mod;
        else dp[i]=dp[i-1];
}
LL pow_mod(LL a,LL n)
{
    LL ans=1;
    while(n)
    {
        if(n&1) ans=ans*a%mod;
        a=a*a%mod;
        n>>=1;
    }
    return ans;
}
LL inv(LL n)
{
    return pow_mod(n,mod-2);
}
int main()
{
    int T;
    LL n;
    init();
    scanf("%d",&T);
    while(T--)
    {
        scanf("%lld",&n);
        LL ans=dp[n+1]*inv(n+1)%mod;
        printf("%lld\n",ans);
    }
    return 0;
}


0
0
查看评论

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

【题目链接】click here~~ 【题目大意】求LCM(Cn0,Cn1,Cn2....Cnn)%MOD 的值 【思路】来图更直观: 这个到底是如何推出的,说实话,本人数学归纳大法没有推出来,幸得一个大神给定愿文详细证明,点击这里:click here~~ 代码: #in...
  • u013050857
  • u013050857
  • 2015-08-21 14:26
  • 1133

数论(CRB and Candies,HDU 5407)

题目链接:https://vjudge.net/problem/HDU-5407 暴力打了个表,感觉找不到什么规律。 1 2 3 12 10 60 105 280 252 2520 2310 27720 25740 24024 45045 720720 想把整个表全部打完估计要一整天。 ...
  • xl2015190026
  • xl2015190026
  • 2017-07-22 21:26
  • 76

HDU 5407 CRB and Candies 数论

Problem Description CRB has N different candies. He is going to eat K candies. He wonders how many combinations he can select. Can you answer his q...
  • just_sort
  • just_sort
  • 2017-07-23 14:47
  • 142

hdu 5407 CRB and Candies(数论)

题目链接:hdu 5407 CRB and Candies ans = LCM(1~N+1) / (N+1) % mod #include #include #include using namespace std; typedef long long ll; const...
  • u011328934
  • u011328934
  • 2015-08-21 22:25
  • 654

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): 584...
  • yanghuaqings
  • yanghuaqings
  • 2015-08-26 15:27
  • 299

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): ...
  • u013840081
  • u013840081
  • 2015-08-31 12:18
  • 379

【数论】 HDOJ 5407 CRB and Candies

数论结论题。。。就是1-n+1的lcm除以n+1。。。。不知道结论怎么做?----没法做。。。 #include using namespace std; typedef long long LL; const int maxn = 1000005; const int N = 1000000...
  • blankcqk
  • blankcqk
  • 2015-08-21 10:10
  • 289

HDU 5407 CRB and Candies(数论+yy)

HDU 5407题意:计算: LCM(C0N,C1N,C2N,...,CNN)(1<=N<=106)LCM(C^0_N,C_N^1,C_N^2,...,C_N^N)(1<=N<=10^6)思路:先打个表看看? 我们可以发现: f(3)=f(4)/4,f(5)=f(6...
  • qq_15714857
  • qq_15714857
  • 2015-08-22 00:10
  • 1512

(ACM数论)求乘法逆元的各种姿势~

首先,通过下面的式子来看看什么是乘法逆元~x * n % P = 1,其中x和P为已知且互素,n未知(比如在 2 * n % 7 = 1 这个式子里,n就是乘法逆元)弄懂什么是乘法逆元,来看看有什么姿势可以把它求出来吧~姿势1.暴力(此姿势不要求P为素数)没有什么问题是一个暴力解决不了的,如果有,那...
  • KasumiMasami
  • KasumiMasami
  • 2016-08-29 16:55
  • 714

【数论】 通过逆元实现大整数除法的取余

当题目中数据较大,而且计算中出现过除法的时候。往往取模会出错 当计算 (A/B) % c    等价于  (A*B1)% c 其中 B1 是 B 的逆元。 那么逆元如何求呢。 先给出逆元的定义 a*x ≡1 (mod n)  ,如...
  • Star_Weeper
  • Star_Weeper
  • 2016-10-30 20:15
  • 525
    个人资料
    • 访问:141595次
    • 积分:5224
    • 等级:
    • 排名:第6240名
    • 原创:396篇
    • 转载:11篇
    • 译文:0篇
    • 评论:21条
    最新评论