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

时间:2023-03-09 01:38:11
【组合数的唯一分解定理】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[][]; //此为上步求得的素因子总数
int a = n - j + ;
int b = j;
for (int i = ; i <= num; i++)
{
int p = fac[i][];
int&q = fac_c[i];
///计算分解式各项指数
for (; a%p == ; a /= p, q++);
for (; b%p == ; b /= p, q--);
}
}

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