#如果!定义的HAVE_PERM_GENUS_H__#定义HAVE_PERM_GENUS_H__//此文件是FXT库的一部分。//版权所有(C)2011、2012、2014、2018、2023、2024 Joerg Arndt//许可证:GNU通用公共许可证第3版或更高版本,//请参阅主目录中的文件COPYING.txt。#包括“ds/bitarray.h”#include“perm/permq.h”//perm_count_cycles()#包括“fxttypes.h”//#包括“jjassert.h”内联ulong置换属(constulong*p,ulongn,//置换和长度ulong*cpi,//旋转逆置换的划痕空间位数组*B=nullptr)//置换p的返回亏格。//算法是O(n)。//[1,2,…,n]置换P的亏格g(P)定义为//g(P)=(1/2)*(n+1-Z(P)-Z(CP')),其中P'是P的逆置换,//C=[2,3,4…,n,1]=(1,2,…,n)(循环移位),//Z(P)是置换P的圈数。//(取自http://oeis.org/A177267){constulong zp=perm_count_cycles(p,n,B);#if 1//更好的接口:无参数pi[]//直接从置换p[]旋转逆置换:对于(ulong j=0;j-->