码迷,mamicode.com
首页 > 其他好文 > 详细

【组合数的唯一分解定理】Uva1635

时间:2015-07-06 15:54:19      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:

给出n、m,求得最终求和数列an=C(n-1,0)*x+ C(n-1,1)*x2+...+C(n-1,n-1)*xn;

若xi与m无关,则an除以m的余数与xi无关,即余数不含xi的项;

输入:n,m

输出:ans     //无关项的总数;

   xi1 xi2 ...  //无关项,升序

 

Tips:

对于组合数的唯一分解定理

由于10^5级别的组合数必然会存在很大的项(long long甚至double都无法保存),要求得其唯一分解式只能采取按递推式分步分解,代码如下:

bool check(int n, int j)//按照递推公式来计算C(n, j)唯一分解式各项的指数
{
    int num = fac[0][0]; //此为上步求得的素因子总数
    int a = n - j + 1;
    int b = j;
    for (int i = 1; i <= num; i++)
    {
        int p = fac[i][0];
        int&q = fac_c[i];
        ///计算分解式各项指数
        for (; a%p == 0; a /= p, q++);
        for (; b%p == 0; b /= p, q--);
    }
}

求完后比较各素因子指数与m唯一分解式的对应指数的大小即可

【组合数的唯一分解定理】Uva1635

标签:

原文地址:http://www.cnblogs.com/LLGemini/p/4624394.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!