zoukankan      html  css  js  c++  java
  • 【组合数的唯一分解定理】Uva1635

    给出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唯一分解式的对应指数的大小即可

  • 相关阅读:
    HTTPS
    RPC
    2017.4.19上午
    2017.4.18下午
    2017.4.18上午
    2017.4.17下午
    2017.4.17上午
    2017.4.14下午
    2017.4.14上午
    2017.4.13下午
  • 原文地址:https://www.cnblogs.com/LLGemini/p/4624394.html
Copyright © 2011-2022 走看看