版权声明:个人笔记,仅供复习 https://blog.csdn.net/weixin_42373330/article/details/82840092
唯一分解定理
- 算术基本定理,又称为正整数的唯一分解定理,即:每个大于1的自然数均可写为质数的积,而且这些素因子按大小排列之后,写法仅有一种方式。(这个定理真的是有趣)
描述:
组合数在组合数学中占有重要地位。与组合数相关的最重要的两个东西是:杨辉三角和二项式定理。下面就是一个杨辉三角:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
另一方面把展开,将得到一个关于x的多项式:
系数正好和杨辉三角一致。一般地,我们有二项式定理:
给定n,如何求出中所有项的系数呢?一个方法是递推,根据杨辉三角中不难发现的规律,可写成如下程序:
memset(C,0,sizeof(C));
for(int i=0;i<=n;i++)
{
C[i][0]=1;
for(int j=1;j<=n;j++) C[i][j]=C[i-1][j-1]+C[i-1][j];
}
但遗憾的是,这个算法的时间复杂度是——尽管我们只用对的是杨辉三角的第n行的n+1个元素,却把全部n行的个元素都计算了一遍。
另一种方法是利用等式,从开始从左到右递推,像这样:
C[0]=1;
for(int i=1;i<=n;i++) C[i]=C[i-1]*(n-i+1)/i;
注意,应该先乘后除,因为C[i-1]/i可能不是整数。
这个可由证明它。
证明:
例题10-4 无关的元素
对于给定的n个元素a1,a2,···,an,依次求出相邻两数之和,将得到一个新的数列。重复上述操作,最后结果将变成一个数。问这个数除以m的余数与哪些数无关?例如n=3,m=2时,第一次求和得到a1+a2,a2+a3,再求和得到a1+2a2+a3,它除以2的余数和a2无关。,。
分析:显然最后的求和公式是a1,a2,···,an的线性组合。设的系数为f(i),则和式除以m的余数与无关当且仅当f(i)是的倍数。
不难得出的系数是.这样问题就变成了:中有哪些是m的倍数。
只需要一次计算m的唯一分解式中各个素因子在中的指数即可完成判断。这些指数仍然可以用递推。