康托展开

康托展开

按规矩,祭天

今天加了的内容是康托展开,因为时间原因就不附上题目了而且我也还没有做题,就直接来看内容了

定义

它是用来求解一个数列的全排列下面的结果的序号的问题
$$
∑(pi*(n-i)!)(i是第几个数字)
$$

逆推

那么就是根据序号求结果了,方法是类似的
首先是把1~n-1的阶乘都算出来,然后呢每一位也是倒着回去,用序号整除这里对应的阶乘,然后看看在剩下的没有选的数字当中哪一个的比它小的数字的个数等于这一个结果就行了

比较简洁,大概就是我对此的理解了

最后还有一个逆元的求法

这个求法的推导自己去推,书上也是有的(数学一本通P17)
那么我就附上一份代码就行了

1
2
3
4
int inv(int n,int p){
if(n==1)return 1;
else return -(p/i)*inv(p%n,p);
}

到此为止了。