#如果!定义的HAVE_LHCA_H__#定义HAVE_LHCA_H__//此文件是FXT库的一部分。//版权所有(C)20102012 Joerg Arndt//许可证:GNU通用公共许可证版本3或更高版本,//请参阅主目录中的文件COPYING.txt。#包括“fxttypes.h”//bpol/lhcarule-minweight.cc:外部常量minweight_lhca_rule[];内联ulong lhca_next(ulong x、ulong r、ulongm)//LHCA:=(1-dim)线性混合元胞自动机。//使用返回LHCA的下一个状态(x之后)//规则(由定义)r://规则150适用于r为1的单元格,规则90适用于其他单元格。//规则150:=下一个(x)=x+左位(x)+右位(x)//规则90:=下一个(x)=左位(x)+右位(x)//长度由m定义://m必须是n个最低位的突发(n:自动机的长度){r&=x;ulong t=(x>>1)^(x<<1);t ^=r;t&=米;返回t;}// -------------------------内联ulong lhca2poly(ulong r,ulong n)//返回与长度n LHCA规则r相对应的二元多项式p。//返回多项式p的次数为n。////如果r给出了最大周期,则p是本原的。////算法://设r=[r(n-1),…,r(2),r(1),r//初始化:p2=0,p1=1//迭代k=0…n-1:{p1,p2}={(x+r)*p1+p2,p1}{ulong p2=0,p1=1;同时(n--){ulong m=r&1;r>>=1;ulong p=(p1<<1)^p2;如果(m)p^=p1;p2=p1;p1=p;}返回p1;}// -------------------------//bpol/bitpol2lhca.cc:ulong-poly2lhca(ulong-p);#endif//!定义的HAVE_LHCA_H__