#获得长度为1,2,3,4,…的二元向量的Lyndon因子分解。。。#ans(A211097)将包含Lyndon因子分解中的因子数量#ansL(A211098)将包含Lyndon因子分解中最大(即最左端)因子的大小#ansLw(A211099)将包含Lyndon因式分解中最大的(即最左端)因子#ansR(不同偏移量的A211095)将包含Lyndon因式分解中最小(即最右边)因子的大小#ansRw(具有不同偏移量的A211096)将包含Lyndon因式分解中的最小(即最右边)因子ans:=[];ansLs:=[];答案:=[];答案:=[];答案:=[];M: =6;#研究长度为M的二进制向量对于从1到M的n dot1:=二进制(2^n,2^(n+1)-1);对于n1从1到nops(t1)dot2:=t1[n1];s2:=底土(1=NULL,t2);t3:=转换器2字符串(s2);t4:=因式分解(t3);lprint(n,t2,t4,nops(t4));ans:=[op(ans),nops(t4)];ansLs:=[op(ansLs),长度(t4[1])];ansLw:=[op(ansLw),t4[1];ansRs:=[操作(ansRs),长度(t4[nops(t4)])];ansRw:=[op(ansRw),t4[nops(t4)]];日期:日期:#这将使用以下过程,当然必须先加载这些过程:#binvecs生成从n1到n2的所有数字的二进制向量(Maple)binvecs:=proc(n1,n2)局部lis,t1,t2,len,n;lis:=[];对于n从n1到n2 dot1:=换算(n,基数,2);长度:=nops(t1);t2:=[seq(t1[len+1-i],i=1..len)];lis:=[op(lis),t2];od;lis;结束;#将列表转换为字符串(Maple)convert2字符串:=proc(x)局部a,t1,i;a: =“”;对于i从1到nops(x),做a:=cat(a,x[i]);od;a;结束;#梅兰康的“无帽”uncat:=进程(字)如果长度(单词)<=1,则[word]其他映射(进程(x,y)子字符串(y,x..x)结束,[$1..长度(单词)],单词)fi;结束时间:#Lyndon分解Duval算法的Melancon实现因式分解:=过程(单词)局部F,i,j,k,n,w;全球uncat;w:=未捕获(单词);n:=长度(单词);k:=0;F:=空;而k<n doi:=k+1;j:=k+2;而j<n+1如果lexorder(w[i],w[j]),则如果w[i]=w[j],则i:=i+1;j:=j+1;其他的i:=k+1;j:=j+1;fi(菲涅耳)否则会中断fi;od;而k<iF:=F,k+(j-i);k:=k+(j-i);od;od;map(proc(x,y)如果x<nops(y),则x+1否则nops(y)fi结束,[操作(1..nops([F])-1,[F],],w);zip(进程(x,y)[x,y]结束,[1,op(%)],[F]);映射(proc(x,y)cat(op(op(1,x)..)。。op(2,x),y)结束,%,w);结束时间: