杨辉三角
给定n求出中所有项的系数?
方法一:利用递推,根据规律,可以从第一层开始逐个的推导出系数,但我们只需要第n行的系数,却把n行所有的系数都求出来了,复杂度为O(n2)。
方法二:利用等式,从
开始从左往右递推,这样就得到第n行的所有系数。
代码:https://code.csdn.net/snippets/452078
约数个数
给定n,求n的正约数个数?
首先要得到n唯一分解式,每个素因子的选择情况有0,1,2…ak共ak+1种,则根据乘法原理,n的正约数个数为:(a1+1)(a2+1)…(ak+1)=
其中n的唯一分解式可以通过从2开始逐个除n方法得到,每次找到一个素因子之后就把它“除干净”,即可保证找到的因子都是素数。
小于n且与n互素的整数个数
对于正整数n,求1,2,3…n中与n互素的个数?
容斥原理。首先要得到n唯一分解式,从总数n中减去p1,p2,…,pk倍数的个数,即
,然后加上“同时是两个素因子的倍数”的个数
,再减去“同时是3个素因子的倍数”。。。得到,传送中的欧拉公式
,根据杨辉三角系数,可以变形为
。
代码:https://code.csdn.net/snippets/452080
编码与解码
编码:快速写出任意一个字符串的编号,如有a<b<c,两个a,一个b,一个c组成的四位编码,输入acab,则输出5。
可以算出该字符串小的字符串个数,再加一就得到该字符串的编号。例如求f(caba)的编号,则编号为f(cba)+f(caa)+f(b)+1=11。其中设字符一共有k类,个数分别为n1,n2,…,nk,则有多重集的全排列个数为
解码:由编号得出字符串
例如,序号8,求字符串。序号8,有7个比他小的编码,则从高位开始,a,f(cba)=6<7,b,f(caa)=3,6+3=9>7,则最高位为b,ba,f(ca)=2,2+6=8>7,则高两位为ba,则baac为7,baca为8.
代码:https://code.csdn.net/snippets/452082