给出n、m,求得最终求和数列an=C(n-1,0)*x1 + 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唯一分解式的对应指数的大小即可
时间: 2024-11-05 19:41:46