/*****************************************************************************//* http://www.research.att.com/~njas/sequences/gatomorf.c.txt*//* *//*gatomorf.c——一个用于经验计算的简洁快速的c程序*//*各种加纯形的循环数*//*在尼尔J.A.斯隆的在线百科全书中找到*//*整数序列的数目:*//* http://www.research.att.com/~njas/序列/*//* *//*由Antti Karttunen编码2003,http://www.iki.fi/~卡图里/*//*并置于公共领域*//*上次编辑20。2003年12月*//*有关最新版本,另请参阅以下网站的副本:*//* http://www.iki.fi/~karturi/matikka/Nekomorphisms/gatomorf.c*//* *//*欢迎在这里添加更多的gatomorphism的实现*//*通过实现相应的双目标函数*//*然后加上适当的序列号*//*结构t_gatom_descr Gatomorphisms[]*//* *//*你可以把改进后的资料寄给我*//*地址:Antti.Karttunen(at)iki.fi*//*或致电Neil Sloane地址njas(at)research.att.com*//* *//*运行该程序最好使用64位体系结构*//*这已经在sunos5.8和Alpha中用OpenVMS进行了测试*//*即使是32位英特尔也可以在大多数情况下,如果它是快速的*//* *//*有关此程序的本质,请参阅例程CountCycles*//* *//*注意,一个人可以分配的最大的连续内存块*//*(对于calloc)本质上是限制一个*//*可以计算这些序列*//*例如,继续到n=21的尺寸,其中A000108(21)=24466267020*//*除以8是3058283378,也就是说,几乎有3千兆字节可用*//*需要记忆*//*对于尺寸n=22,我们有A000108(22)=91482563640*//*除以8等于11435320455等于4294967296(2^32)*//*因此不仅需要大量的内存,而且*//*大于32位宽的指针*//* *//*对于真正的64位sun,编译时使用:*//*cc-DREQUIRES_LONG_LONG-xO4-fast-o gatomorf gatomorf.c-xtarget=ultra-xchip=ultra-xarch=v9/* *//*计算像A057505这样的亚纯形的LCM,其中*//*很快就会发生溢出>=2^64,这有助于如下运行:*//*./gatomorf 57505 18-l |分拣|统一*//*在使用*//*无限整数精度*//* *//*要仅获得奇数循环,请使用:*//*./加托莫夫57505 18-l |格雷普-v'[02468]$'*//* *//*添加选项-M以获得适当的输出:*//*./gatomorf 57505 18-l-M |分类| uniq*//* *//*对于Mathematica,执行相同的操作,但使用额外的过滤器:*//*./gatomorf 57505 18-l-M |排序| uniq | tr“\[\]”“{}”| fgrep-v“#”*//* *//*对于许多相同的加纯形的方案实现,请参见:*//* http://www.iki.fi/~karturi/matikka/Nekomorphisms/gatomorf.htm*//* *//*****************************************************************************/#包括“stdio.h”/*64位的最大大小是31,32位的机器只有15。我们需要额外的一片树叶(因为最后一片树叶)*/#ifdef仅32位#定义MAXSIZE 21#为15定义最大尺寸#其他#定义MAXSIZE 31#为31定义最大尺寸#结束语typedef无符号字符字节;typedef无符号长int ULI;#定义填充字节((字节)((~(字节)0)))#ifdef需要typedef无符号long long int ULLI;/*64位sun上的两个long*/typedef long long int SLLI;/*同上*/#另外,/*我们运行的是Alpha,或者一些32位的小型计算机*/typedef无符号long int ULLI;/*12月阿尔法只有一个长的*/typedef long int SLLI;/*同上*/#结束语typedef ULLI TBBS;/*TBBS=完全平衡的二进制序列。32位的大小不超过n=15,64位小于n=31*/typedef SLLI RANK;/*使用32位,我们可以达到n=19的大小,而64位则更进一步*/typedef int大小;/**********************************************************************//* *//*增加了14。2003年10月:SEXP结构(一个简单的平面二叉树)*//*因为大多数的加纯性在这种情况下更容易定义*//*类似Lisp的术语,比直接处理二进制序列要好*//* *//**********************************************************************/结构经验{struct s_exp*s_car;/*即二叉树的左分支*/struct s_exp*s_cdr;/*即----“”---*/};typedef结构s_exp SEXP_cell;typedef SEXP_cell*SEXP;#定义NULLP(s)((s)==NULL)#定义对(!NULLP(s))#定义车辆((s)->s_CAR)#定义CDR((s)->s\U CDR)#定义集合车(s,x)(((s)->s_CAR)=x)#定义集合\ CDR(s,x)(((s)->s_CDR)=x)SEXP cons(SEXP carside,SEXP cdrside){SEXP newcell=((SEXP)calloc(1,sizeof(SEXP_cell)));if(NULL==newcell){fprintf(标准,“cons:无法分配%u字节的块来存储一个cons单元格!\n”,大小(SEXP_cell));出口(1);}/*fflush(stdout);fprintf(stderr,“cons called!\n”);fflush(stderr)*/集合车(newcell、carside);SET_CDR(newcell,cdrside);return(newcell);}/*跳到车边,找到第一个犯人牢房如果它的CAR或CDR侧为空,然后把那个细胞送回去,供侦察员重复使用*/SEXP degraft(SEXP*子进程){性感z;if(NULLP(汽车(*subroot))){z=*副转子;*子程序=CDR(z);返回(z);}if(NULLP(CDR(*subroot))){z=*副转子;*副轨道=轿厢(z);返回(z);}返回(degraft(&(CAR(*subroot)));}/*这里不是一个渐进式的解构将以前的S表达式转换为单独的空闲列表(也就是说把它压平!)在较大的S表达式上可能更快:*/SEXP recons(SEXP carside,SEXP cdrside,SEXP*重用){if(NULLP(*reused)){返回(cons(carside,cdrside));}其他的{SEXP z=降解(再利用);轿厢(z,轿厢侧);设置\u CDR(z,cdrside);返回(z);}}/*递归释放分配有cons的树*/空的无冲突树(SEXP节点){if(NULLP(node)){return;}if(!NULLP(CAR(node)){空闲树(CAR(node));}if(!NULLP(CDR(node)){空闲树(CDR(node));}自由(节点);}/**********************************************************************//*指向接受TBB并返回TBB的函数的指针(对于在完全平衡的二进制字符串上工作的实现,不是S表达式)。*/类型定义TBBS(*PFGM U TBBS)(TBBS);/*指向接受SEXP但不返回任何内容的函数的指针(对于在S表达式上工作的破坏性实现)。*/类型定义无效(*PFGM_SEXP)(SEXP);#定义NULLGMT((PFGM_TBBS)0)#定义NULLGMS((PFGM_SEXP)0)#定义0#定义FORCE_SEXP 1#定义力2#定义LONG_ONE((ULLI)1)#定义2到(n)(LONG_ONE<<(n))#定义递归模式\u 0(A,B)\无效A(sexps){if(对){B(s);A(汽车);A(CDR(s));}#定义递归模式1(A,B)\无效A(sexps){if(对){A(汽车);A(CDR(s));B(s);}#定义递归模式2(A,B)\无效A(sexps){if(对){B(s);A(CDR(s));}}#定义递归模式3(A,B)\无效A(sexps){if(对){A(CDR(s));B(s);}}#定义递归模式(A,B)\无效A(sexps){if(对){B(汽车);A(CDR(s));}}#定义将“应用于”左侧(A,B)\无效A(sexps){if(对){B(车);}#定义(A,B,C)void A(sexps){C(s);B(s);}的组合tbbsgmt_A001477(TBBS a){返回(a);}TBBS格林威治标准时间A057117(TBBS a);TBBS格林威治标准时间A057163(TBBS a);TBBS格林威治标准时间A057164(TBBS a);TBBS gmt_A057505(TBBS a){返回(gmt_A057164(gmt_A057163(a));}TBBS gmt_A057506(TBBS a){返回(gmt_A057163(gmt_A057164(a));}TBBS gmt_A071661(TBBS a){返回(gmt_a05705(gmt_a05705(a));}TBBS gmt_A071662(TBBS a){返回(gmt_A057506(gmt_A057506(a));}TBBS gmt_A071663(TBBS a){返回(gmt_A057505(gmt_A071661(a));}TBBS gmt_A071664(TBBS a){返回(gmt_A057506(gmt_A071662(a));}TBBS gmt_A071665(TBBS a){返回(gmt_A071661(gmt_A071661(a));}TBBS gmt_A071666(TBBS a){返回(gmt_A071662(gmt_A071662(a));}TBBS gmt_A071667(TBBS a){返回(gmt_A057505(gmt_A071665(a));}TBBS gmt_A071668(TBBS a){返回(gmt_A057506(gmt_A071666(a));}TBBS gmt_A071669(TBBS a){返回(gmt_A071663(gmt_A071663(a));}TBBS gmt_A071670(TBBS a){返回(gmt_A071664(gmt_A071664(a));}无效gms U A001477(SEXP s){}作废gms U A069770(SEXP s);作废gms U A072796(SEXP s);无效gms U A072797(SEXP s);作废gms U A074679(SEXP s);作废gms U A074680(SEXP s);作废gms U A082351(SEXP s);作废gms U A082352(SEXP s);无效gms U A089850(SEXP s);作废gms U A089851(SEXP s);作废gms U A089852(SEXP s);作废gms U A089853(SEXP s);SExVOID_秒;作废gms U A089855(SEXP s);作废gms U A089856(SEXP s);作废gms U A089857(SEXP s);成分(gms U A074679v2,gms U A069770,gms U A089853)/*1 o 6=12*/成分(gms U A089858,gms U A069770,gms U A089852)/*1 o5=13*/成分(gms U A073269,gms U A069770,gms U A072796)/*1 o 2=14*/成分(gms U A089859,gms U A069770,gms U A089850)/*1 o3=15*/成分(gms U A089860,gms U A069770,gms U A089851)/*1 o 4=16*/成分(gms U A074680v2、gms U A069770、gms U A089855)/*1 o9=17*/成分(gms U A089861,gms U A069770,gms U A072797)/*1 o8=18*/成分(gms U A073270,gms U A069770,gms U A089856)/*1 o 10=19*/成分(gms U A089862,gms U A069770,gms U A089857)/*1 o 11=20*/成分(gms U A089863,gms U A069770,gms U A089854)/*1 o7=21*/(gms U A089864,gms U A089863,gms U A089863)的组成将U应用于左侧(gms U A089865,gms U A074679)将U应用于左侧(gms U A089866,gms U A074680)无效gms U A071655(SEXP s);作废gms U A071656(SEXP s);作废gms U A071659(SEXP s);作废gms U A071660(SEXP s);作废gms U A082335(SEXP s);作废gms U A082336(SEXP s);作废gms U A082349(SEXP s);作废gms U A082350(SEXP s);/*基于A069770(交换边)的Gatomorphisms*/递归模式0(gms U A057163,gms U A069770)递归模式2(gms U A069767,gms U A069770)递归模式3(gms U A069768,gms U A069770)组成(gms U A073286、gms U A069770、gms U A069767)组成(gms U A073287、gms U A069768、gms U A069770)/*这些信函解释了为什么A073288/9有A023359作为其固定计数序列:类似地,当我们用任何加纯形来做(映射foo!s)以A019590作为其修复计数序列(即只有()和(()),那么我们就得到了A000045,斐波纳契数。*/递归模式2(gms_A073288,gms_A073286)/*递归模式(gms_A073288,gms_A069767);}*/递归模式3(gms_A073289,gms_A073287)/*递归模式(gms_A073289,gms_A069768);}*/递归模式2(gms U A082345,gms U A069767)递归模式3(gms U A082346,gms U A069768)递归模式2(gms U A082347,gms U A069768)递归模式3(gms U A082348,gms U A069767)/*基于A072796的加纯形(交换最左边的两个分支)*/递归模式_0(gms_A057511,gms_A072796)递归模式1(gms U A057512,gms U A072796)递归模式2(gms U A057509,gms U A072796)递归模式3(gms U A057510,gms U A072796)递归模式1(gms U A057164,gms U A057509)递归模式2(gms U A057508,gms U A057510)/*递归模式3(gms U A057508,gms U A057509)*//*基于A072797的加纯形(A072796的A057163共轭)*/递归模式2(gms U A082339,gms U A072797)递归模式3(gms U A082340,gms U A072797)递归模式0(gms U A074681,gms U A074679)递归模式1(gms U A074682,gms U A074680)递归模式1(gms U A074683,gms U A074679)递归模式_0(gms_A074684,gms_A074680)递归模式2(gms U A074685,gms U A074679)递归模式3(gms U A074686,gms U A074680)递归模式(gms U A085169,gms U A074684)递归模式(gms U A085170,gms U A074683)将U应用于左侧(gms U A089867,gms U A085169)将U应用于左侧(gms U A089868,gms U A085170)递归模式(gms U A089869,gms U A085169)递归模式(gms U A089870,gms U A085170)递归模式2(gms U A057501,gms U A074680)递归模式3(gms U A057502,gms U A074679)递归模式0(gms U A057506,gms U A057502)递归模式1(gms U A057505,gms U A057501)递归模式2(gms U A057504,gms U A057502)递归模式3(gms U A057503,gms U A057501)/*基于A082351&A082352的几何纯形*/递归u s u模式递归模式0(gms U A082356,gms U A082352)(gms U A057161、gms U A057508、gms U A069767)的组成(gms U A057162、gms U A069768、gms U A057508)的组成(gms U A069888、gms U A057501、gms U A057164)的组成(gms U A082313,gms U A069888,gms U A057502)的组成(gms U A082333,gms U A057163,gms U A082313)的组成(gms U A082334,gms U A082313,gms U A057163)的组成(gms U A082315、gms U A057501、gms U A057501)的组成(gms U A082316、gms U A057502、gms U A057502)的组成无效gms U A069771(SEXP s);(gms U A069772,gms U A057164,gms U A069771)的组成(gms U Anew1,gms U A074684,gms U A057164)/*分配A-编号*/(gms_Anew2,gms U A057164,gms U A074683)/*这些,稍后*/(gms U A085161,gms U Anew1,gms U A074683)/*A085161=(74684 57164 74683)的组成*/(gms U A085163,gms U A085161,gms U A057508)的组成组成(gms U A085164、gms U A057508、gms U A085161)结构描述{国际加图1;int gato_num2;/*倒数的A-num,如果对合,等于gato_num*/const char*gato_描述;工艺流程图1;PFGM_TBBS gato_tbbsfun2;/*gato_tbbsfun1的逆,如果对合,则相等*/PFGM\u SEXP gato_sexpfun1;PFGM_SEXP gato_sexpun2;/*gato_sexpfun1的逆,如果对合,等于*/关东国际中心;国际加藤修复;国际加图最大值;国际加图lcm;};/*指向输出有关gato_描述符的某些信息的函数的指针:*/typedef void(*PF_GATO_OUT)(文件*,int,struct t_gatom_descr*);typedef int(*PF_VEC_OUT)(文件*,ULLI*,int,int);/*这里的数字代表尼尔·斯隆的整数序列在线百科全书。E、 g.45代表A000045,即斐波纳契数。0代表那些序列还没有提交给OEI(或者我没有找到),或者哪个我不想屈服。注:A084100(无符号显示)可能比A046698更好地表明对合的MAX和LCM序列:1,1,2,2,2,2,2,2,。。。*/结构t_gatom_descr Gatomorphisms[]={/*Asigperm1,Asigperm2,说明CCs固定最大LCM*/{14771477,“A089840[0]:身份。”,格林威治标准时间A001477,格林威治标准时间A001477,gms_A001477,gms_A001477,108,108,12,12},{69770,69770,“A089840[1]:交换二叉树的左右子树”,空GMT,NULLGMT,gms U A069770,gms U A069770,7595,108,46698,46698},{72796,72796,“A089840[2]:如果阶数大于1,则交换一般树最左边的两个分支”,空GMT,NULLGMT,gms U A072796,gms U A072796,7319173190,46698,46698},{89850,89850,“A089840[3]:如果S-exp的长度大于1,则交换其cadr和cddr”,空GMT,NULLGMT,gms U A089850,gms U A089850,7319173190,46698,46698},{89851,89853,“A089840[4]/[6]:当S-exp长度大于1时,旋转轿厢、cadr和cddr”,空GMT,NULLGMT,gms U A089851,gms U A089853,89847,89848,0,0},{89852,89852,“A089840[5]:如果S-exp长度大于1,则交换car和cddr”,空GMT,NULLGMT,gms U A089852,gms U A089852,7319173190,46698,46698},{89854,89854,“A089840[7]:交换S-exp的caar和cdar(A057163 A089850的共轭物)”,空GMT,NULLGMT,gms U A089854,gms U A089854,7319173190,46698,46698},{72797,72797,“A089840[8]:A057163 A072796的共轭物”,空GMT,NULLGMT,gms U A072797,gms U A072797,7319173190,46698,46698},{89855,89857,“A089840[9]/[11]:尽可能旋转S-exp的caar、cdar和cdr”,空GMT,NULLGMT,gms U A089855,gms U A089857,89847,89848,0,0},{89856,89856,“A089840[10]:交换S-exp的caar和cdr(A057163 A089852的共轭物)”,格林尼治标准时间上午896,格林尼治标准时间0时06分,7319173190,46698,46698},{74679,74680,“A089840[12]/[17]:尽可能旋转二叉树,否则交换其两侧”,空GMT,NULLGMT,gms U A074679,gms U A074680,1683195908941089410},{89858,89861,“A089840[13]/[18]:加纯形性A089858/A089861”,空GMT,NULLGMT,gms U A089858,gms U A089861,/*支票*/73193195908942289423},{73269,73270,“A089840[14]/[19]:加纯形性A073269/A073270”,空GMT,NULLGMT,gms U A073269,gms U A073270,7319319590,89422,89423},{89859,89863,“A089840[15]/[21]:加纯形性A089859/A089863”,空GMT,NULLGMT,gms U A089859,gms U A089863,89407,0,40002,40002},/*将A040002右移两次(前置1)。固定数为1,1,0,1,0,0,0,1,0,0,0,2,0,0,0,5,0,0,0,0,14,0,…即A000108充气两次*/{8986089862,“A089840[16]/[20]:加纯形性A089859/A089862”,空GMT,NULLGMT,gms U A089860,gms U A089862,1683195908941089410},{89865,89866,“A089840[4207]/[4299]:将A074769/A074680应用于左子树”,空GMT,NULLGMT,gms U A089865,gms U A089866,89844,5807,89410,89845},/*max count seq实际上是正确的(A089410)*/{82351,82352,“A089840[4069]/[4253]:非递归加纯:A082351/A082352”,空GMT,NULLGMT,gms U A082351,gms U A082352,89424,108,89425,89425},{89864,89864,“A089840[1654694]:加纯形性A089864.(A089859或A089863平方)”,空GMT,NULLGMT,gms U A089864,gms U A089864,89402,89408,46698,46698},{57117,57118,“Meeussen的bf<->二叉树上的df转换”,格林威治标准时间A057117,空gmt,空GMS,空GMS,38775,0,57542,60113},/*固定计数序列以1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3*/{57163,57163,“反射有根平面二叉树”,格林威治标准时间A057163,格林威治标准时间A057163,gms A057163,gms U A057163,7595,108,46698,46698},{57164,57164,“反射有根平面通用树(深反括号)”,格林威治标准时间A057164、gmt A057164、gms A057164、gms U A057164,712314054669846698},{57508,57508,“浅反圆括号”,空GMT,NULLGMT,gms U A057508,gms U A057508,7319373192 46698 46698},{57501,57502,“旋转非交叉弦排列;旋转一般树的根位置”,空GMT,NULLGMT,gms U A057501,gms U A057502,2995195905754357543/*本质上是*/},{8231582316,“旋转两次非交叉弦排列”,空GMT,NULLGMT,gms U A082315,gms U A082316,54357,46698,65475,65475},{69771,69771,“旋转非交叉弦排列180度”,空GMT,NULLGMT,gms U A069771,gms U A069771,712314054669846698},{69772,69772,“X轴反射非交叉弦排列”,空GMT,NULLGMT,gms U A069772,gms U A069772,89880,89849,46698,46698},{57503,57504,“加纯形性A057503/A057504”,空GMT,NULLGMT,gms U A057503,gms U A057504,16831959057544557544},{57505,57506,“多纳希地图M(对合线A057163和A057164的组成)”,格林威治标准时间A057505,格林威治时间A057506,gms A057505,gms U A057506,575071959057545 60114},{71661,71662,“多纳希地图M^2”,格林威治标准时间A071661,格林威治标准时间A071662,空GMS,空GMS,79437、79438、79439、89403},{71663,71664,“多纳希地图M^3”,格林威治标准时间A071663,格林威治标准时间A071664,空GMS,空GMS,79441、79442、79443、89871},{71665,71666,“多纳希地图M^4”,格林威治标准时间A071665,格林威治标准时间A071666,空GMS,空GMS,89872,89873,89874,89875},{71667,71668,“多纳希地图M^5”,格林威治标准时间A071667,格林威治标准时间A071668,空GMS,空GMS,89876,89877,89878,89879},{7166971670,“多纳希地图M^6”,格林威治标准时间A071669,格林威治标准时间A071670,空白,空白,0,0,0,0},{57A,50A旋转,“浅层旋转”,空GMT,NULLGMT,gms U A057509,gms U A057510,3239,34731,28310,3418},{57511,57512,“旋转圆括号的所有级别(深度旋转)”,空GMT,NULLGMT,gms U A057511,gms U A057512,57513、57546、793、3418},{69767,69768,“递归交换二叉树的另一端”,空GMT,NULLGMT,gms U A069767,gms U A069768,73431,36987,11782,11782},{73286,73287,“递归交换二叉树的另一端,但不包括根节点”,空GMT,NULLGMT,gms U A073286,gms U A073287,89404,73268,11782,11782},{73288,73289,“将A069767/A069768应用于每个顶层子树”,空GMT,NULLGMT,gms U A073288,gms U A073289,89405,23359,11782,11782},{82345,82346,“加纯形A082345/A082346:在递归方案2和3中应用A069767/A069768”,空GMT,NULLGMT,gms U A082345,gms U A082346,89406,0,0,0},/*定点序列从1,1,0,1,0,2,0,3,0,6,0,10,0,18,0,31,0,56,0,98,0开始其对分(奇数定位项)似乎是A023359(有待证明)*//*Max.和LCM序列以1,1,2,2,4,8,16,32,6412825651210242048开始,。。。i、 它们几乎与A011782相同,但中间插入了2个*/{82347,82348,“加纯形A082347/A082348:在递归方案2和3中应用A069768/A069767”,空GMT,NULLGMT,gms U A082347,gms U A082348,89406,0,0,0},{57161,57162,“旋转多边形三角剖分”,空GMT,NULLGMT,gms U A057161,gms U A057162,16831959057544557544},{74681,74682,“加纯性A074681/A074682”,/*下一个的共轭*/空GMT,NULLGMT,gms U A074681,gms U A074682,894111959096586412},/*2新机86586*/{74683,74684,“加纯性A074683/A074684(少轨道,非单调)”,空GMT,NULLGMT,gms U A074683,gms U A074684,894111959086586412},/*同上*/{71655,71656,“加纯形性A071655/A071656”,空GMT,NULLGMT,gms U A071655,gms U A071656,89413195908941489415},{71659,71660,“加纯形性A071659/A071660”,空GMT,NULLGMT,gms U A071659,gms U A071660,89413195908941489415},/*同上*/{69888,69888,“通过拐角轴反射非交叉弦(A057501 o A057164)”,空GMT,NULLGMT,gms U A069888,gms U A069888,7595,108,46698,46698},{82313,82313,“Meeussen偏斜catacycles(A069888 o A057502)”,空GMT,NULLGMT,gms U A082313,gms U A082313,712314054669846698},{82333,82334,“对合A057163和A082313的组合(较大的轨道,具有非单调凹口)”,空GMT,NULLGMT,gms U A082333,gms U A082334,89417,89418,89419,89420},{85163,85164,“加纯形性A085163/A085164”,空GMT,NULLGMT,gms U A085163,gms U A085164,90828、51920、90829、90830},{8516985170,“将A074684/A074683应用于每个顶层子树”,空GMT,NULLGMT,gms U A085169,gms U A085170,86585,45,86586,86587},{89867,89868,“将A085169/A085170应用于左子树”,空GMT,NULLGMT,gms U A089867,gms U A089868,89846,90826,86586,86587},/*在这里和下面检查86586和86587(右移)*/{89869,89870,“将A085169/A085170应用于每个顶层子树”,空GMT,NULLGMT,gms U A089869,gms U A089870,90827,129,86586,86587},/*检查A000129是否确实在反转(A000045)*/{82335,82336,“如果可能,请旋转二叉树,否则将其反射”,空GMT,NULLGMT,gms U A082335,gms U A082336,894211959099289423},{82349,82350,“如果可能,旋转二叉树,否则应用加纯形A069767/A069768”,空GMT,NULLGMT,gms U A082349,gms U A082350,73193195908942289423},/*上面的最后两个*/{82355,82356,“加纯形性A082355/A082356,在递归方案1&0中应用A082351/A082352”,空GMT,NULLGMT,gms U A082355,gms U A082356,89426,46698,89427,89428},{82339,82340,“亚纯形性A082339/A082440,浅申请A072797”,空GMT,NULLGMT,gms U A082339,gms U A082340,89429,89430,16116,16116},{结束,“0”,空gmt,NULLGMT,NULLGMS,NULLGMS,0,0,0,0}/*FIN*/};int globopt_output_cycle_list=0;char*globopt_list_begin=“(”;char*globopt_list_delim=“”;char*globopt_list_end=“)”;char*globopt_elem_delim=“”;char*globopt_pair_begin=“(”;char*globopt_pair_delim=“”;char*globopt_pair_end=“)”;char*globopt_comment_begin=“;”;int globopt_HTML=0;int glob_哪一个=1;int glob_which_implementation=以两者为准;char*glob_author_info=“Antti Karttunen(他的姓,他的姓(AT)iki.fi)”;char*glob帴datestr=“20YY年1月-日”;/*E、 g.,2003年10月28日*/#ifdef仅32位#定义SS 20#其他#定义SS 33#结束语等级sA00108[SS]={1,1,2,5,14,42,132,429,1430,4862,16796,58786,208012、742900、2674440、9694845、35357670、129644790,477638700,1767263190/*最后一个值<2^32,n=19*/#ifndef仅32位,6564120420,24466267020,91482563640,343059613650,1289904147324861946401452,18367353072152,69533550916004、263747951750360、1002242216651368,3814986502092304、14544636039226909、55534064877048198#结束语};#定义类别(n)(sA00108[n])#定义globrank(树大小,lrank)((0==(tree_size))?0:a01437(tree_size-1)+(lrank))/*最后一个值<2^32,n=19*/排名sA014137[SS]={1,2,4,9,23,65,197,626,2056,6918,23714,82500,290512、1033412、3707852、13402697、48760367、178405157,656043857,(职级)2423307047#ifndef仅32位,8987427467,33453694487,124936258127,467995871777,175790001910116619846420553,24987199492705,94520750408709,358268702159069,1360510918810437,517549742090274119720133460129650、75254198337177848#结束语};#定义A014137(n)(sA014137[n])/*注意:行和列都从-1开始*//*CatTriangle入口(r,m)=CatTriangle(r,m-1)+CatTriangle(r-1,m)*/#定义CatTriangle(r,c)(tA009766[(r+2)][(c+1)])#ifdef仅32位#定义TR 21#其他#定义TR 34#结束语RANK tA009766[][TR+1]=/*34行完整版*/{{0},{0,0},{0,1,0},{0,1,1,0},{0,1,2,2,0},{0,1,3,5,5,0},{0,1,4,9,14,14,0},{0,1,5,14,28,42,42,0},{0,1,6,20,48,90,132,132,0},{0,1,7,27,75,165,297,429,429,0},{0,1,8,35,110,275,572,1001,1430,1430,0},{0,1,9,44,154,429,1001,2002,3432,4862,4862,0},{0,1,10,54,208,637,1638,3640,7072,11934,16796,16796,0},{0,1,11,65,273,910,2548,6188,13260,25194,41990,58786,58786,0},{0,1,12,77,350,1260,3808,9996,23256,48450,90440,149226,208012,208012,0},{0,1,13,90,440,1700,5508,15504,38760,87210,177650,3268776,534888,742900,742900,0},{0,1,14,104,544,2244,7752,23256,62016,149226,326876,653752,1188640,1931540,2674440,2674440,0},{第一百六十五百五十二五百三十五百七十五百五十三五百九十五百五十三五百五十三五百九十五百五十三五百五十三五百五十三五百五十三五百五十三五百五十三五百五十三五百五十三五百五十三五百五十三五百五十三五百五十三五百五十三五百五十三五,2414425,4345965,7020405,9694845,9694845,0},{0,1,16,135,798,3705,14364,48279,144210,389367,961400,2187185,4601610,894757515967980,25662825,35357670,35357670,0},{0,1,17,152,950,4655,19019,67298,211508,600875,1562275,3749460,8351070,17298645,33266625,58929450,94287120,129644790,129644790,0},{0,1,18,170,1120,5775,24794,92092,303600,904475,2466750,6216210,1456728031865925、65132550124062000、218349120、347993910477638700,477638700,0},{0,1,19,189,1309,7084,31878,123970,427570,1332045,3798795,10015005、24582285、56448210、121580760、245642760、463991880、811985790,1289624490,1767263190,1767263190,0}#ifndef仅32位/*然后在第一行后面输入一个>4294967295的值*/,{0,1,20,209,1518,8602,40480,164450,592020,1924065,5722860,15737865、40320150、96768360、218349120、463991880、927983760、1739969550,3029594040404044796857230,6564120420,6564120420,0},{0,1,21,230,1748,10350,50830,215280,807300,2731365,8454225,24192090、64512240、161280600、379629720、843621600、1771605360,3511574910654116895011338026180179021466024466267020,24466267020,0},{0,1,22,252,2000,12350,63180,278460,1085760,3817125,12271350,36463440、100975680、262256280、641886000、1485507600、3257112960,6768687870、13309856820、24647883000、42550029600、67016296620,91482563640,91482563640,0},{0,1,23,275,2275,14625,77805,356265,1442025,5259150,17530500,53993940、1549696620417225900、1059111900、2544619500、58017324660,1257042033025880277150,50528116015093078189750,160094486370,25157705010343059613650,343059613650,0},{0,1,24,299,2574,17199,95004,451269,1893294,7152444,24682944,78676884、233646504、650872404、1709984304、4254603804、10056336264,22626756594485070337449035193894192113383644352207870014,603784920024,946844533674,1289904147324,1289904147324,0},{0,1,25,324,2898,20097,115101,566370,2459664,9612108,34295052,112971936、346618440、997490844、2707475148、6962078952、17018415216,39645171810、88152205554、187187399448、3793007830992、731508653106,13352935731302282138106804 3572042254128,4861946401452,4861946401452,0},{0,1,26,350,3248,23345,138446,704816,3164480,12776588,47071640,1600435676、506662016、1504152860、421162808、11173706960、28192122176,67837293986155989499540343176898988722477682801453986335186,2789279908316、5071418015120、8643460269248、13505406670700,18367353072152,18367353072152,0},{0,1,27,377,3625,26970,165416,870232,4034712,16811300,63882940,223926516、730588532、2234741392、6446369400、1762007636045812198536,113649492522、26963899062、612815891050、1335293573130、2789279908316,55785598166321069977831752199343810100032798844771700,51166197843852,69533550916004,69533550916004,0},{0,1,28,405,4030,31000,196416,1066648,5101360,21912660,85795600,3097221161040310648、3275052040、9721421440、27341497800、73153696336,186803188858456442180920 1069258071970 2404551645100593831553416,1077239137004821422369201800、40715807302800、73514652074500,124680849918352,194214400834356,263747951750360,263747951750360,0},{0,1,29,434,4464,35464,231880,1298528,6399888,28312548,114108148,423830264、1464140912、4739192952、14460614392、418012192、114955808528,301758997386、758201178306、1827459250276、4232010895376、942584248792,20198233818840、4162060320640、82336410323440、155851062397940,280531912316292,474746313150648,738494264901008,1002242216651368,1002242216651368,0},{0,1,30,464,4928,40392,2722722,1570800,7970688,362832336,150391384,574221648、2038362560、6777555512、21238169904、63040282096、177996090624,4797550880101237956266316、3065415516592、7297426411968、16723268860760,36921502679600,78542105700240,160878516023680,316729578421620,59726149073791221072007803888560、1810502068789568、2812744285440936,3814986502092304,3814986502092304,0},{0,1,31,495,5423,45815,318087,1888887,9859575,46142811196534195,770755843、2809118403、9586673915、30824843819、93865125915、271861216539,751616304549、1989572570865、5054980887457、12352414499425、29075683360185,659971860397851445399291740025305417807763705 622147386185325,121940887692372372291416680811797 4101918749601365,6914663035042301,10729649537134605,14544636039226909,14544636039226909,0},{0,1,32,527,5950,51765,369852,2258739,12118314,58261125,254795320,2136143434363138384831351138138631,409972529754、1161588834303、3151161405168、8206149492625、20558563992050,4963424735223511563133392020 2601707251320455588532895750,1187735919081075、2407144796004312、4698561476816109、8800480226417474,15715143261459775、26444792798594380、4098942883781289、55534064877048198,55534064877048198,0}#结束语};/*楼层日志2(55534064877048198)=552^64;=18446744073709551616号一、 比天津四的距离多一点,以*米为单位。*/加泰罗尼亚兰科德等级(尺寸n,TBBS a){int y=-1;整数r=0;秩lo=0;而(a>0){如果(0==(a&1)){r++;lo+=牛角形(r,y);}其他的{y++;}a>>=1;}返回(类别(n)-(lo+1));}/* 参见Frank Ruskey的论文:http://www.cs.uvic.ca/~fruskey/Publications/Thesis/Thesis.html*/排名加泰罗尼亚排名(大小n,TBBS a){int m=-1;int y=0;秩r=0;而(a>0){如果(0==(a&1)){m++;}其他的{y++;r+=牛角(m,y);}a>>=1;}返回(r);}TBBS Catalanurnrank(尺寸n,等级r){int m=n-1;int y=n;TBBS a=0;而(m>=0){等级c=牛角(m,y);a<<=1;如果(r>=c){是--;a++;r-=c;}其他的{m--;}}返回(a);}/*这当然不是再进入。。。另一种方法,如果你需要一个并行版本。*/静态内部CRS_m,CRS_y;静态秩比;void catalanRankExpaux(SEXP节点){if(NULLP(node)){CRS_m--;}其他的{CRS_r+=CatTriangle(CRS_m,CRS_y);CRS_y--;CatalanRankexpaux(车辆(节点));CatalanRankExpaux(CDR(节点));}}RANK CatalanRankSexp(大小n,SEXP节点){CRS_m=n-1;CRS_y=n;CRS_r=0;CatalanRankexpaux(节点);返回(CRS_r);}SEXP catalanurnranksep(大小n,秩r,SEXP*重复使用){int m=n-1;int y=n;int sp=0;int rightson=0;SEXP根=NULL;SEXP sonstack[MAXSIZE+1];当(大于等于0 m){等级c=牛角(m,y);如果(r>=c){SEXP newbranch=recons(空,空,重用);if(NULLP(root)){root=newbranch;}其他的{if(rightson){SET_CDR(sonstack[sp],newbranch);}else{SET_CAR(sonstack[sp],newbranch);sp++;}}sonstack[sp]=newbranch;是--;r-=c;rightson=0;/*下一个是左子*/}其他的{m--;sp-=rightson;rightson=1;/*下一个是rightson*/}}返回(根);}加泰罗尼亚兰全球排名(尺寸n,TBBS a){if(0==n){返回(0);}else{return(A014137(n-1)+CatalanRank(n,a));}}排名CatalanRankSexpGlobal(尺码n,SEXP s){if(0==n){返回(0);}else{return(A014137(n-1)+CatalanRankSexp(n,s));}}无效打印\u sexp(sexp s){putchar('(');while(!NULLP(s)){print_sexp(CAR(s));s=CDR(s);}putchar(')');}/*参见末尾的“数字转换”一节节选:http://www.iki.fi/~karturi/matikka/kl10exmp.txt*/int fprint_ulli(文件*fp,ulli x){int s=0;如果(x>=10){s=fprint_ulli(fp,(x/((ulli)10));}fputc(('0'+(x%((ULLI)10))),fp);返回(s+1);}/*当然,我们也可以在运行时计算它*/空格子三角(int到\n){内r,m;对于(r=0;r<=到\n;r++){对于(m=0;m<r;m++){如果((CatTriangle(r,m-1)+CatTriangle(r-1,m))!=CatTriangle(r,m)){fprintf(stderr,“(CatTriangle(%d,%d)+CatTriangle(%d,%d))=”,r、 (m-1),(r-1),m);fprint_ulli(标准(CatTriangle(r,m-1)+CatTriangle(r-1,m)));fprintf(stderr,“与CatTriangle(%d,%d)=”不同,r、 m);fprint_ulli(标准,CatTriangle(r,m));fprintf(stderr,“\n”);出口(1);}}如果((r>0)&(CatTriangle(r,m)!=CatTriangle(r,m-1))){fprintf(标准偏差,“(CatTriangle(%d,%d)=”,r,m);fprint_ulli(标准,CatTriangle(r,m));fprintf(stderr,“不同于CatTriangle(%d,%d)=”,r,(m-1));fprint_ulli(标准,CatTriangle(r,m-1));fprintf(stderr,“\n”);出口(1);}}/*fprintf(stderr,“三角形确定!\n”)*/}无效的检查排名(int到\n)/*嗯,表面上*/{国际标准;秩r,r2,uplim;对于(n=0;n<=到\n;n++){uplim=类别(n);对于(r=0;r<uplim;r++){TBBS tbs=加泰罗尼亚银行(n,r);if(globopt_output_cycle_列表){fprint_ulli(标准输出,tbs);printf(“”);}r2=加泰罗尼亚克(n,tbs);如果(r2!=r){fflush(标准输出);fprintf(stderr,“CatalanRank(%d,”,n);fprint_ulli(标准,待定);fprintf(stderr,“)=”);fprint_ulli(标准,r2);(stfprintf),“!”;fprint_ulli(标准,r);fprintf(stderr,“\n”);出口(1);}}if(globopt_output_cycle_list){printf(“\n”);}}fprintf(stdout,“排名和取消排名正常,上限为n=%d.\n”,上限为\n);}空头支票恶作剧(int到\n)/*嗯,表面上*/{国际标准;秩r,r2,uplim;SEXP old_s=空;对于(n=0;n<=到\n;n++){uplim=类别(n);对于(r=0;r<uplim;r++){SEXP s=加泰罗尼亚努朗克塞普(n、r和old_s);if(globopt_output_cycle_列表){打印;打印(“”);}r2=加泰罗尼亚兰克斯普(n,s);如果(r2!=r){fflush(标准输出);fprintf(stderr,“CatalanRankSexp(%d,s)=”,n);fprint_ulli(标准,r2);fprintf(stderr,“!=”);fprint_ulli(标准,r);fprintf(stderr,“\n”);出口(1);}旧s=s;}if(globopt_output_cycle_list){printf(“\n”);}}fprintf(stdout,“排名和取消排名正常,上限为n=%d.\n”,上限为\n);}/**********************************************************************/ULLI gcd(ULLI a,ULLI b){乌利ex_b;而(0!=b){ex_b=b;b=a%b;a=ex_b;}返回(a);}/*这里我们假设b通常比a小得多*/ULLI lcm(ULLI a,ULLI b){ULLI z=(b/gcd(a,b));z*=a;/*z=a*(b/gcd(a,b))*/if(z<a){return(0);}/*返回0表示溢出*/else{return(z);}}/*请注意,即使使用64位字长,上述内容也很容易溢出,如已A060114(12)=14510088480716327580681600它是83位整数。*/#定义k字节(n)((int)((n)>>3))/*从RANK到int*/#定义从int到RANK的第k位(n)(((RANK)(n))<<3)/**/#在字节(n)((字节)(1<((n)&7))/*中定义第i位(u位)*/#define toggle_bit_on(B,n)(B[kth_byte(n)]|=第i个位_in_byte(n))#定义位_为_零(B,n)(0==(B[k字节(n)]&i位_以字节(n)))_first_0_位的RANK pos_(字节*标志,RANK uplim,RANK*起始点){一级;字节b;int h,uplim_in_bytes=kth_字节(uplim);/*如果加纯有一个适当的环结构,那么这个循环有帮助,否则它只是无害的:*/对于(h=kth_字节(*起始点);(h<uplim_in_bytes)&&(填充字节==标志[h]);h++){}/*概念清晰,但可能产生缓慢的代码,除非优化器非常聪明。(我们应该手动展开这个循环,毕竟,字节中只有8位!)*/对于(i=kth_位(h);i<uplim;i++){if(bit_is_zero(flags,i)){*起始点=(i+1);return(i);}}返回(-1);}char*w6d(char*tb,int n){sprintf(tb,“%06u”,n);收益(tb);}void output_HTML_Alink(文件*fp,int Anum){字符tb[81]={A'};char*Astr=(w6d(tb+1,Anum)-1);fprintf(fp,'%s“,阿斯特,阿斯特);}输出字符u{while(i--){putchar(c);}}void output_n_spaces(int i){输出_n_chars(i,,);}无效输出周期长度(int n,int to \u n,int r,int c,int maxcyc){/*Lisp列表中括号“(”和“)”在数字前排序,而Maple/Prolog/Haskell方括号“[”、“]”以及Mathematica方括号“{”、“}”排序之后他们。*/int方括号_sort_before_numbers=!!(*globopt_list_begin<'0');/*0或1*/输出\u n_空格((最多\u n-n)+括号\u sort_前面的号码);if(0!=maxcyc){printf(“%s”,globopt_elem_delim);}否则/*没有我们无法解决的难题*/{if(*globopt_elem_delim>'+'){putchar('+');}/*将每个文件的第一个作为第一个*/}如果(globopt_output_cycle_list>1){printf(“%s”,globopt_pair_begin);fprint_ulli(标准输出,(r+((0==n)?0:A014137(n-1)));printf(“%s”,globopt_pair_delim);}printf(“%d”,c);if(globopt_output_cycle_lists>1){printf(“%s”,globopt_pair_end);}printf(“\n”);}int choose_实现(struct t_gatom_descr*gato_descr,直到现在,在哪个实现中,哪一个,PFGM_SEXP*p_gm_SEXP,总经理){交换机(哪个实现){案例力图:{*p_gm_sexp=((2==哪一个)?gato_descr->gato_sexpfun2:gato_descr->gato_sexpfun1);如果(!*p_gm_sexp){fprintf(标准,“choose\u implementation:没有实现%u个gatomorphism的SEXP版本,请重新启动,但不要使用-S选项!\n”,((1==哪一个?加图说明->加图编号1:加图说明->加图编号2));出口(1);}休息;}案例力:{*p_gm_tbbs=((2==哪一个)?gato_descr->gato_tbbsfun2:gato_descr->gato_tbbsfun1);如果(!*p_gm_tbbs){fprintf(标准,“choose\u implementation:没有实现gatomorphism%u的TBBS版本,请重新启动,但不要使用-T选项!\n”,((1==哪一个?加图说明->加图编号1:加图说明->加图编号2));出口(1);}休息;}以下列情况为准:{if(1==哪个){如果(gato_descr->gato_sexpun1){*p_gm_sexp=gato_descr->gato_sexpun1;}else if(gato_descr->gato_tbbsfun1){*p_gm_tbbs=gato_descr->gato_tbbsfun1;}其他的{维希:fprintf(标准,“choose\u implementation:既没有实现SEXP-也没有实现TBBS版本的gatomorphism%u,抱歉!\n”,((1==哪一个?加图说明->加图编号1:加图说明->加图编号2));出口(1);}}else/*if(2==哪一个)*/{如果(gato_descr->gato_sexpun2){*p_gm_sexp=gato_descr->gato_sexpun2;}否则如果(gato_descr->gato_tbbsfun2){*p_gm_tbbs=gato_descr->gato_tbbsfun2;}否则{goto virhe;}}休息;}}/*开关(哪个实现)*/if((NULL!=*p_gm_tbbs)&&(小于等于\u n>MAXSIZE\u FOR_tbbs)){fprintf(标准,“choose_implementation:使用TBBS实现,您只能计算最大为%u的大小。如果希望最大为%u,请尝试-S选项。\n”,最大尺寸为\u TBBS,小于等于\u n);出口(1);}return(哪一个);/*只返回一些东西*/}无效的CountCycles(int n,int到\u n,总经理,总经理,总经理,总经理,在哪个实现中,ULLI*p_周期,ULLI*p_固定,ULLI*p_最大周期,ULLI*p_lcms){秩uplim=Cat(n);需要int字节数=((int)(upim>>3))+1;BYTE*flags=((BYTE*)calloc(bytes_needed,sizeof(BYTE));/*位表,它可以变大*/排名ff;/*第一新鲜*/等级起点=0;ULLI循环=0;ULLI固定=0;ULLI最大值=0;SEXP=零;如果(NULL!=p_lcms){*p_lcms=1;}if(NULL==标志){fprintf(stderr,“无法分配%u字节的块来存储Cat(%d)=”,所需字节数,n);fprint_ulli(标准,类别(n));fprintf(stderr,“位!\n”);出口(1);}if(globopt_output_cycle_列表&&(0==n)){输出空格((不超过\n-n)+1);/*必须首先绝对排序*/printf(“%s\n”,globopt\u list_begin);}while(-1!=(ff=pos_of_first_zero_位(标志、上行链路和起始点))){ULLI c=0;秩r=ff;如果(通用汽车){sexp=Catalanurnranksep(n、r和sexp);{c++语言;打开(标志,r);gm_sexp(sexp);r=加泰罗尼亚兰克斯普(n,sexp);}while(bit_是_0(标志,r));}else/*if(通用汽车)*/{TBBS tbs=加泰罗尼亚银行(n,r);{c++语言;打开(标志,r);tbs=gm_tbs(tbs);r=加泰罗尼亚克(n,tbs);}while(bit_是_0(标志,r));}if(globopt_output_cycle_列表){输出周期长度(n,小于等于n,r,c,maxcyc);}循环++;if(1==c){fixed++;}如果(c>maxcyc{maxcyc=c;}if((NULL!=p_lcms)&&(0!=*p_lcms)){*p_lcms=lcm(*p_lcms,c);}}*p_周期=(ULLI)周期;*p_fixed=(ULLI)固定;*p_maxcyc=(ULLI)最大值;if(globopt_output_cycle_列表){输出空间(最多可达n-n);printf(“%s%s%s\n”,globopt\u list\u end,((n<到n)?globopt_list_delim:“”),((n<到n)?globopt_list_begin:“”));}输出空间(最多可达n-n);printf(“%s”,globopt_comment_begin);putchar('');fprint_ulli(标准输出,循环);putchar('');fprint_ulli(标准输出,固定);putchar('');fprint_ulli(stdout,maxcyc);if(NULL!=p_lcms){putchar('');fprint_ulli(stdout,*p_lcms);}printf(“\n”);fflush(标准输出);免费(旗帜);自由树(sexp);}无效计算签名(ULLI*vec,int-up-n,PFGM-SEXP-gm-SEXP,PFGM-TBBS-gm-TBBS){国际标准;SEXP SEXP=空;TBBS tbs=0;等级r;int from_size_n=0;积分i=0;for(n=从\u size_n;n<=到\u n;n++){对于(r=0;r<Cat(n);r++){如果(通用汽车){sexp=Catalanurnranksep(n、r和sexp);gm_sexp(sexp);vec[i]=CatalanRankSexpGlobal(n,sexp);}else/*if(通用汽车)*/{tbs=加泰罗尼亚银行(n,r);tbs=gm_tbs(tbs);vec[i]=加泰罗尼亚兰全球(n,tbs);}如果(++i)>小于或等于{goto ulos;}}}乌洛斯:自由树(sexp);}通用汽车公司的文件,通用汽车公司的文件{国际标准;SEXP SEXP=空;TBBS tbs=0;等级r;积分i=0;for(n=从\u size_n;n<=到\u n;n++){对于(r=0;r<Cat(n);r++){如果(i>0){fprintf(fp,”,“”;}如果(通用汽车){sexp=Catalanurnranksep(n、r和sexp);gm_sexp(sexp);fprint_ulli(fp,加泰罗尼亚兰克斯普洛普(n,sexp));}else/*if(通用汽车)*/{tbs=加泰罗尼亚银行(n,r);tbs=gm_tbs(tbs);fprint_ulli(fp,加泰罗尼亚兰全球(n,tbs));}如果(++i)>小于或等于{goto ulos;}}}乌洛斯:自由树(sexp);}/*返回第一个位置,逆测试失败,如果成功,返回0*/int NOTreverses(内部不超过n,PFGM SEXP gm_SEXP SEXP SEXP SEXP sexp2,PFGM_TBBS gm_tbbs1,PFGM_TBBS gm_tbbs2){国际标准;SEXP SEXP=空;TBBS tbs=0;等级locrank,r2;积分i=1;int from_size_n=1;for(n=从\u size_n;n<=到\u n;n++){对于(locrank=0;locrank<Cat(n);locrank++){如果(gm_sexp1){sexp=Catalanurnranksep(n、locrank和sexp);gm_sexp1(sexp);gm_sexp2(sexp);r2=加泰罗尼亚兰克斯普洛普(n,sexp);如果(r2!=globrank(n,locrank)){返回(i);}}else/*if(通用汽车)*/{tbs=加泰罗尼亚银行(n,locrank);tbs=gm_tbbs2(gm_tbbs1(tbs));r2=加泰罗尼亚兰全球(n,tbs);如果(r2!=globrank(n,locrank)){返回(i);}}}}乌洛斯:自由树(sexp);返回(0);}void fprint_vector(文件*fp,ULLI*vec,int upplimi){国际i;fprintf(fp,“%s”,globopt\u list_begin);对于(i=0;i<=uplimi;i++){如果(i>0){fprintf(fp,“%s”,globopt_elem_delim);}fprint_ulli(fp,*(vec+i));}fprintf(fp,“%s”,globopt_list_end);}void fprint_vector_up_到_first_0(文件*fp,ULLI*vec,int uplimi){国际i;fprintf(fp,“%s”,globopt\u list_begin);对于(i=0;(i<=uplimi)&&(0!=*(vec+i));i++){如果(i>0){fprintf(fp,“%s”,globopt_elem_delim);}fprint_ulli(fp,*(vec+i));}fprintf(fp,“%s”,globopt_list_end);}/*返回完成时由于不再适合而打印的字词数,否则为零,当所有内容都已打印时*/int fprint_vector_直到_line_已满(FILE*fp,ULLI*vec,int upplimi,int max_linelen){int i=0;/*这次打印的术语数*/int pl=0;/*打印长度*/对于(;;){pl+=fprint_ulli(fp,vec[i++]);if(i>upplimi){return(0);}/*完成*/fprintf(fp,“%s”,globopt_elem_delim);pl+=strlen(globopt_elem_delim);if(pl>=max_linelen){return(i);}/*返回非零以指示应该打印更多的术语*/}}int fprint_vector_up_first_0_或_直到_line_已满(FILE*fp,ULLI*vec,int uplimi,int max_linelen){int i=0;/*这次打印的术语数*/int pl=0;/*打印长度*/对于(;){pl+=fprint_ulli(fp,vec[i++]);if((i>upplimi)|(0==vec[i]){return(0);}/*完成*/fprintf(fp,“%s”,globopt_elem_delim);pl+=strlen(globopt_elem_delim);if(pl>=max_linelen){return(i);}/*返回非零以指示应该打印更多的术语*/} }#定义OEIS_S_T_U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U#定义OEIS_SEEK_MAXLEN 140无效输出“OEIS”序列(FILE*fp,const char*name,/*例如“圈数”*/*在排列A0xxxxx/A0YYYY的[A014137(n-1)…A014138(n-1)]*/const char*注释1,国际年鉴,char*permname,ULLI*vec,int到\n,打印出来,结构说明,int sigperm/*一个标志*/){字符tb[81]={A'};char*Astr=(w6d(tb+1,Anum)-1);第1项的int pos_2=0;int只打印_up_到\u nth_term=0;int sec_只打印_up_到\u nth_term=0;char*save_globopt_list_begin=全局选项列表\开始;char*save_globopt_list_end=globopt_list_end;char*save_globopt_elem_delim=globopt_elem_delim;/*为fprint_vector设置这些:*/globopt_list_begin=“”;globopt_list_end=“”;globopt_elem_delim=“,”;而((第1项的位置<=小于等于n)&&(*(第1项第2项的向量+位置<2)){第1项的位置}如果(pos_1st_term_gte_2>到n){pos_1st_term_gte_2=1;}/*未找到,请使用1*/else{pos_1st_term_gte_2++;}/*因为一个基于*/fprintf(fp,“%%I%s\n”,Astr);if(globopt_HTML){fprintf(fp,%%S“);输出\u HTML_Alink(fp,Anum);fprintf(fp,'");仅打印_-up_-nth_-term=fprintvefun(fp,vec,up-n,OEIS_-U-tu-U-LINE_-MAXLEN);fprintf(fp,'");}其他的{fprintf(fp,“%%S%S”,Astr);仅打印_-up_-nth_-term=fprintvefun(fp,vec,up-n,OEIS_-U-tu-U-LINE_-MAXLEN);}fprintf(fp,“\n”);如果(只打印到第n项>0)/*继续到%T行*/{fprintf(fp,“%%T%s”,Astr);sec_-printed_-only_-up_-nth_-term=fprintvefun(fp,vec+仅打印的_-up-to-nth-term,OEIS-usu-tu-U-LINE_-MAXLEN);fprintf(fp,“\n”);}如果(sec_printed_only_up_nth_term>0)/*继续到%U行*/{仅打印的“仅打印”到“最多”项+=秒打印“仅打印”到“最多”项;fprintf(fp,“%%U%s”,Astr);fprintvefun(fp,vec+仅打印到第n项,最多打印到第n项,OEIS_U T_U U_U_U U_U_U_U_U__U_U_U_U__U_U_U_U峎n项,OEIS峎U__U__UïU;fprintf(fp,“\n”);}fprintf(fp,“%%N%s%s”,Astr,名称);如果(sigperm){fprintf(fp,“.\n”);}其他的{fprintf(fp,“在排列%s的[a01437(n-1)…a01438(n-1)]范围内。\n”,permname);}if(NULL!=注释1){fprintf(fp,“%%C%s%s\n”,Astr,注释1);}如果(sigperm){fprintf(fp,%%H%s A.Karttunen,计算这个序列的C程序\n“,阿斯特);}其他的{fprintf(fp,%%H%s A.Karttunen,计算这个序列初始项的C程序\n“,阿斯特);}如果(sigperm){字符tb1[21];fprintf(fp,%%H%sCatalan自同构诱导的签名置换的索引项\n“,阿斯特);如果(0!=(gato_descr->gato_ccs+gato_descr->gato_fix+加图说明->加图最大值+加图说明->加图lcm)){fprintf(fp,%%Y%s”,Astr);如果(0!=gato_descr->gato_ccs){fprintf(fp,“循环数:A%s.”,w6d(tb1,gato_descr->gato_ccs));}->0(加图){fprintf(fp,“固定点数:A%s.”,w6d(tb1,gato_descr->gato_fix));}如果(0!=gato_descr->gato_max&&(gato_descr->gato_max==gato_descr->gato_lcm)){fprintf(fp,“所有循环大小的最大循环大小和LCM:A%s.”,w6d(tb1,gato_descr->gato_Max));}其他的{如果(0!=gato_descr->gato_max){fprintf(fp,“最大循环大小:A%s.”,w6d(tb1,gato_descr->gato_Max));}如果(0!=gato_descr->gato_lcm){fprintf(fp,“循环大小的LCM:A%s.”,w6d(tb1,gato_descr->gato_LCM));}}fprintf(fp,“(在该排列的[a01437(n-1)…a01438(n-1)]范围内,可能向左或向右移动一项。\n”);}}fprintf(fp,“%%K%s nonn\n”,Astr);fprintf(fp,“%%O%s 0,%u\n”,Astr,第1项的位置2);fprintf(fp,“%%A%s%s,%s\n”,Astr,glob_author_info,glob_datestr);/*例如Antti Karttunen(名字。姓@iki.fi)2003年10月28日*/fprintf(fp,“\n”);fflush(fp);globopt_list_begin=保存globopt_list_begin;globopt_list_end=保存globopt_list_end;save_globopt_elem_delim=保存\u globopt_elem_delim;}无效计数\u gatos_四个序列(FILE*fp,int up \u n,struct t_gatom_descr*gato_descr){{PFGM_SEXP gm_SEXP=空gms;PFGM_TBBS gm_TBBS=空GMT;国际标准;ULLI v_周期[MAXSIZE+1],v_fixed[MAXSIZE+1],v_maxcyc[MAXSIZE+1],v_lcms[MAXSIZE+1];ULLI*p_lcms=v_lcms;字符tb1[21],tb2[21];字符名称[51];选择实现(gato_descr,up-to-n,glob-u-which-implementation,glob-u-which-one,&gm\u-sexp,&gm\u-tbbs);对于(n=0;n<=到\n;n++){CountCycles(n,up-n,gm-sexp,gm-tbbs,glob-which-implementation,&(v_周期[n]),&(v_fixed[n]),&(v_maxcyc[n]),p_lcms;如果(NULL==p_lcms){v_lcms[n]=0;}else/*if(NULL!=p_lcms)*/{如果(0!=*p_lcms){p_lcms++;}否则{p_lcms=NULL;}/*一旦溢出,就不要计算lcm*/}}如果(gato_descr->gato_num1!=gato_descr->gato_num2){sprintf(永久名称,“A%s/A%s”,w6d(tb1,gato U descr->gato_num1),w6d(tb2,加图说明->加图努m2));}否则/*这是对合*/{sprintf(永久名称,“A%s”,w6d(tb1,gato_descr->gato_num1));}输出序列(fp,“循环数”,/*在排列A0xxxxx/A0YYYY的[A014137(n-1)…A014138(n-1)]范围内*/“对应的自同构将n个内部节点的A000108(n)二叉树集划分到的轨道数。”,gato_descr->gato_ccs,永久名称,v_周期,直到n,打印矢量直到线满为止,加藤描述,0);输出_OEIS_序列(fp,“固定点数”,“由相应的自同构固定的n节点二叉树的数目。”,gato_descr->gato_修复,permname,固定,最多,打印矢量直到线满为止,加藤描述,0);输出序列(fp,“最大循环大小”,空,gato_descr->gato_max,永久名称,最大值,小于等于,打印矢量直到线满为止,加藤描述,0);输出_OEIS_序列(fp,“所有循环大小的最小公倍数”,NULL,加图说明->加图lcm,永久名称,v\u lcms,直到\n,先将向量_向上打印到_0_或_,直到_line_满为止,加藤描述,0);}}/***********************************************************************/虚空映射(FILE*fp,int-up-n,PF-GATO-OUT-do-it){积分i=0;结构说明*gato_descr;while((gato_descr=&(Gatomorphisms[i++])&&&(0!=gato_descr->gato_num1)){执行(fp,直到n,gato AU descr);}}void desc_gatomorphism(FILE*fp,int up unu n,struct t_gatom_descr*gato_descr){如果(gato_descr->gato_num1!=gato_descr->gato_num2){fprintf(fp,“A0%u/A0%u-%s.\n”,gato_descr->gato_num1,gato_descr->gato_num2,gato_descr->gato_描述);}其他的{fprintf(fp,“A0%u-%s.\n”,gato_descr->gato_num1,gato_descr->gato_描述);}}空列表_加纯(FILE*fp){map_over_gatomorphism(fp,0,description_gatomorphism);}反序文件{PFGM_SEXP gm_sexp1=空gms;PFGM_TBBS gm_tbbs1=空GMT;PFGM_SEXP gm_sexp2=空gms;PFGM_TBBS gm_tbbs2=空GMT;字符tb1[21],tb2[21];国际e;if((NULLGMS!=gato_descr->gato_sexpfun2)||(NULLGMT!=gato_descr->gato_tbbsfun2)){选择“实现”(gato_descr,MAXSIZE_FOR_TBBS,glob_which_implementation,1,&gm_sexp1,&gm_tbbs1);选择“实现”(gato_descr,MAXSIZE_FOR_TBBS,glob_which_implementation,2,&gm_sexp2,&gm_tbbs2);如果(0<(e=非倒数(不超过n,gm_sexp1,gm_sexp2,gm_tbbs1,gm_tbbs2))){fprintf(fp,“Gatomorphisms A%s and A%s互不逆?条件在n=%u处中断\n”,w6d(tb1,gato_descr->gato_num1),w6d(tb2,加图说明->加图努m2),e);}其他的{fprintf(fp,“Gatomorphisms A%s和A%s在测试到大小n=%u时似乎彼此相反\n”,w6d(tb1,gato_descr->gato_num1),w6d(tb2,加图说明->加图努m2),直到\n);}}其他的{fprintf(fp,“Gatomorphisms A%s和A%s可能是相反的,但无法测试,因为后者没有实现!\n”,w6d(tb1,gato_descr->gato_num1),w6d(tb2,加图说明->加图努m2));}fflush(fp);}void output_HTML_gatos_SignaturePerm(文件*fp,ULLI*vec,int up n,PFGM_SEXP gm_tbs gm_TBBS,int Anum,struct t t_gatom_descr*gato_descr){字符tb1[21];字符permname[51],gmname[151];sprintf(永久名称,“A%s”,w6d(tb1,Anum));sprintf(gmname,“gatomorphism%s的特征置换”,w6d(tb1,Anum));计算符号周期(vec,不超过n,gm_sexp,gm_tbbs);输出序列(fp,gmname,gato_descr->gato_描述,阿努姆,永名,vec,直到n,打印矢量直到线满为止,加图说明,1);}#为626/*A014137(7)=626定义最大值*/void output_HTML_both_gatos_SignaturePerm(文件*fp,int up \u n,struct t_gatom_descr*gato_descr){PFGM_SEXP gm_SEXP=空gms;PFGM_TBBS gm_TBBS=空GMT;ULLI-vec[最大值为\u N_,对于_SIGPERMS+1];如果(小于或等于最大值小于等于最大值小于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于等于{选择实现(gato_descr,MAXSIZE_FOR_TBBS,glob_which_implementation,1,&gm_sexp,&gm_TBBS);输出符号项(fp、vec、up、gm_sexp、gm_tbbs、gato_descr->gato_num1、gato_descr);}如果((gato_descr->gato_num2!=gato_descr->gato_num1)&&((NULLGMS!=gato_descr->gato_sexpfun2)||(NULLGMT!=gato_descr->gato_tbbsfun2))){选择“实现”(gato_descr,MAXSIZE_FOR_TBBS,glob_which_implementation,2,&gm_sexp,&gm_TBBS);输出符号项(fp、vec、up、gm_sexp、gm_tbs、gato_descr->gato_num2、gato_descr);}fprintf(fp,“\n”);fflush(fp);}void output_HTML_checkfile(FILE*fp,int到\u n){fprintf(fp,'由gatomorf.c生成的加纯签名置换的检查表\n“);fprintf(fp,'\n“);fprintf(fp,'
\n“);映射同胚(fp,直到n,输出两个符号项);fprintf(fp,'
\n“);}void output_HTML_countfile(FILE*fp,int到\u n){fprintf(fp,'由gatomorf.c生成的加纯计数序列的检查表\n“);fprintf(fp,'\n“);fprintf(fp,'
\n“);映射幺半对称(fp,最多,计数四个序列);fprintf(fp,'
\n“);}结构论{积分i=0;结构说明*gato_descr;while((gato_descr=&(Gatomorphisms[i++])&&&(0!=gato_descr->gato_num1)){如果(gato_descr->gato_num1==gatonum){*which=1;return(gato_descr);}如果(gato_descr->gato_num2==gatonum){*which=2;return(gato_descr);}}fprintf(stderr,“对不起,gatomorphism%u没有实现!\n”,加托努姆);返回(空);}/**********************************************************************/int main(int argc,字符**argv){ULLI x=(ULLI)(((SLLI)-1));char*progname=*argv;char*塔尔;int gatonum=0,小于等于\n;结构说明*gato_descr;char*count_或_check=NULL;方格三角形(19);如果(argc<3){用法:fprintf(stderr,“用法:%s axxxxx size[-l]\n”,progname);fprintf(标准,“这里的大小在[0,%d]之间,并且A0xxxxx是以下gatomorphisms之一:\n”,最大尺寸);单纯形(stderr);fprintf(stderr,“\nA014486-特殊用法:给出大小为n的A014486的术语。”;fprintf(stderr,“或使用格式:%s CHECK 197-H生成签名排列的HTML检查文件。\n”,progname);fprintf(stderr,“和格式:%s COUNTALL size计算所有序列,直到给定的大小为止。\n”,progname);出口(1);}如果((空==(tharg=*++argv))||!(isdigit(*tharg)| |('a'==*tharg)| |('a'==*tharg)| |('c'==*tharg)| |('i'==*tharg)|('i'==*tharg))){转到用法;}else if(isdigit(*tharg)| |('A'==toupper(*tharg))){加托努=atoi(tharg+(!isdigit(*tharg)));如果(14486==gatonum){}else if(!(gato_descr=find_Gatomorphism(gatonum,&glob_which_one)){goto用法;}}否则{count_or_check=tharg;}/*我们可能用“check”或“COUNTALL”或“INVTEST”代替“axxxxx”*/如果((NULL==(tharg=*++argv))| |!(isdigit(*tharg))){转到用法;}其他的{小于等于atoi(tharg);如果((小于等于0)| |((0!=gatonum)&&(小于等于最大尺寸))){转到用法;}}while((tharg=*++argv)&&('-'==*tharg)){字符c;而(c=*++tharg){开关(c){案例“l”:{globopt_output_cycle_list++;休息;}案例A:{if(NULL==(glob_author_info=*++argv)){fprintf(stderr,“Option-A需要一个参数。示例:-A \“Apollonius Sequentius(apo.seq(AT)someaddress.edu)\”\n“);转到用法;}休息;}案例D:{如果(NULL==(glob_datestr=*++argv)){fprintf(stderr,“Option-D需要参数。示例:-D \“Oct 28 2003\”\n“);转到用法;}休息;}案例“H”:{globopt_HTML=1;休息;}case'M':/*Maple输出和Haskell/Prolog输出*/{globopt_list_begin=“[”;globopt_list_delim=“,”;globopt_list_end=“]”;globopt_elem_delim=“,”;globopt_pair_begin=“[”;globopt_pair_delim=“,”;globopt_pair_end=“]”;globopt_comment_begin=“#;”;休息;}案例“R”:{检查排名(不超过n);检查恶作剧(最多);退出(0);休息;}案例:{glob_which_implementation=强制执行;休息;}案例“T”:{glob_which_implementation=强制执行;休息;}违约:{fprintf(stderr,“未知选项%s!\n”,tharg);转到用法;}}}}如果(14486==gatonum){globopt_output_cycle_list++;检查排名(不超过n);if(globopt_output_cycle_lists>1){CheckSexpRankings(不超过n);}退出(0);}如果(NULL!=count_or_check)/*即(0==gatonum),那么我们用“check”或“COUNTALL”代替“axxxxx”*/{if('C'==toupper(count_or_check[0])){if((count_or_check[1])&&('H'==toupper(count_or_check[1])){输出\u HTML_checkfile(标准输出,最多不超过n);}其他的{输出\u HTML_countfile(stdout,最多\u n);}}其他的{映射全对称(stdout,up-n,checkInverses);}退出(0);}计数四个序列(stdout,up,gato_descr);}/*只需反转二进制扩展:*/尤利A030101(尤利a){ULLI b=0;while(0!=a){b<<=1;b |=((a)和1);a>>=1;}返回(b);}int A070939(ULLI n)/*二进制宽度n,宽度“0”=1*/{积分i=0;if(0==n){返回(1);}而(0!=n){i++;n>>=1;}返回(i);}/*只需反转并补足完全平衡的二进制字符串*/TBBS格林威治标准时间A057164(TBBS a){TBBS b=0;while(0!=a){b<<=1;b |=((~a)&1);a>>=1;}返回(b);}/*保留两个“平行”堆栈,另一个用于重建完全平衡的二进制字符串,另一个用于相应尺寸。从末尾开始扫描参数“a”,按零(离开)到堆栈,并连接到最上面从堆栈中弹出的子树(-binary strings)当遇到1时。请注意,如果size=32,则无法正确运行二进制树,即64位TBB,如使用通常丢弃的最后一个叶零在日常生活中。*/TBBS格林威治标准时间A057163(TBBS a){TBBS tree_stack[MAXSIZE+1],*tsp=&(tree_stack[MAXSIZE+1]);TBBS size U堆栈[MAXSIZE+1],*ssp=&(size_stack[MAXSIZE+1]);TBBS b;*--tsp=0;/*最后一个叶是隐式的,不在a中标记*/*--ssp=1;/*且其大小为1*/while(0!=a){if(0==(a&1))/*将零(leaves)推送到堆栈*/{*--tsp=0;*--ssp=1;}否则/*为1,按交换顺序连接两个分支*/{TBBS左=*tsp++;TBBS右=*tsp++;ULLI lefsi=*ssp++;ULLI rigsi=*ssp++;*--ssp=(龙逖ONE+lefsi+rigsi);*--tsp=two-to(lefsi+rigsi)+(右<<lefsi)+左;}a>>=1;}return((*tsp>>1));/*丢弃最后一片叶子*/}/*这一切都是从哪里开始的在SeqFan邮件列表中:发件人:Wouter Meeussen收件人:“'seqfan@ext.jussieu.fr'"主题:我不说了,又一次。。。日期:2000年5月2日星期二19:02:32+0100树:深度优先还是宽度优先例子:1110 1 1 10 0 0 0 0 10 0深度优先(履带式)为(1(10(1 0 0))(1(1 0 0)(1 0(100)))公元前0 1 2 3456 78 9A宽度第一行:(1)(11)(0111)(00 00 00 01)(00)10000 1110 11 1...为了比较,这里是A057118的方案定义(A057117的倒数),操作S表达式:;; 转换(a.(b.rest))-->((a.b).rest);; 不浪费细胞。(定义(cons2top!堆栈)(let((ex cdr(cdr堆栈)))(设置cdr!堆栈(car ex cdr))(设置车辆!前cdr堆栈)前cdr))(定义(gma057118 bt);原为:df->bf(let((conts(list car));;我们做的最后一件事就是开车(递归((bt bt)(深度0))(let*(plp(nthcdr深度控制))(左传球(和(对-plp)(轿厢plp))(newcont(lambda(堆栈)((或向左传球(list ref conts(-1+depth)))(if(对?bt)(cons2top!stack)(cons bt stack))))))(如果向左传球(上车!plp newcont)(追加!继续(list newcont)))(导线((线对?bt)(递归(车辆bt)(1+深度))(递归(cdr bt)(1+深度)))));让*);让递归((car(last pair conts))(list));现在,将最后一个闭包应用到()))*/TBBS gmt_A057117_aux(TBBS北、国际、国际r){国际j、c、w;TBBS x,y;if(0==((n)&1)){return(0);}对于(c=i,j=1;j<=r;j++){c+=(n&1);n>>=1;}w=c<1;/*w=2*c*/i<<=1;/*i=2*i*//*现在w=前一行1的计数的两倍,下一行的宽度。n指向下一行的开始。*/对于(c=0,j=1;j<=i;j++){c+=(n&1);n>>=1;}/*现在n开头的1位是“c”:整个n中的第1位(从零开始)*/x=格林威治标准时间A057117_aux(北纬,(w-(j-1)));y=格林威治标准时间A057117_aux(n>>1,c+(n&1),(w-j));i=A070939(y);/*重用i*/返回(((TBBS)1)<<(i+A070939(x))+(x<<i)+y;}TBBS gmt_a05717(TBBS a){返回(gmt_A057117_aux(A030101(a),0,1)>>1);}/**********************************************************************//* *//*S表达式破坏性地修改实现*//* *//**********************************************************************//*几个基本的非递归加纯。剩下的大部分可以用这些来建造。*/作废gms_A069770(SEXP s)/*交换侧面,(a.b)-->(b.a)*/{如果(对){SEXP org_car=汽车;车辆(单元);设置车辆;}}/*看到了吗http://www.research.att.com/~njas/sequences/gatonore.c.txt去理解这些。;; (permute-a06118(向量'a'b'c'd'e'f'g)3 0)-->\;; (permute-a06118(向量'a'b'c'd'e'f'g)3 1)-->\;; (permute-a06118(向量'a'b'c'd'e'f'g)3 2)-->\;; (permute-a06118(向量'a'b'c'd'e'f'g)3 3)-->\;; (permute-a06118(向量'a'b'c'd'e'f'g)3 4)-->\;; (permute-a06118(向量'a'b'c'd'e'f'g)3 5)-->\*/无效gms U A072796(SEXP s)/*(a.(b.c))-->(b.(a.c))*/{if(对和对(CDR(s))){SEXP org_car=汽车;设置轿厢,轿厢(CDR);设置车辆(CDR(s),组织车辆;}}/*子句gmA089850[]={CLAUSESEQ_begin(3,1),{2,0,0,2}};=A089840[3]*/无效gms U A089850(SEXP s)/*(a.(b.c))-->(a.(c.b))*/{SEXP光盘;if(对和对(cdr_s=cdr(s))){SEXP org_cadr=汽车(cdr_s);集合车(cdr U s,cdr(cdr U s));设置\u CDR(CDR_u s,org_cadr);}}/*子句gmA089851[]={CLAUSESEQ_begin(3,1),{2,0,0,3}};=A089840[4]*/无效gms U A089851(SEXP s)/*(a.(b.c))-->(b.(c.a))*/{SEXP光盘;if(对和对(cdr_s=cdr(s))){SEXP org_cadr=CAR(cdr_s);/*b*/把车(cdr_s,cdr(cdr_s));/*c设为b的位置*/将_CDR(CDR_s,CAR(s));/*a设置到c的位置*/把车设为a的位置*/}}/*子句gmA089852[]={CLAUSESEQ_begin(3,1),{2,0,0,4}};=A089840[5]*/作废gms U A089852(SEXP s)/*(a.(b.c))-->(c.(b.a))*/{SEXP光盘;if(对和对(cdr_s=cdr(s))){SEXP org_cddr=CDR(CDR_s);/*保存org.c*/设置\ CDR(CDR_s,CAR(s));/*用a代替它*/将_CAR(s,org_cddr);/*和org.c设置为a的位置*/}}/*子句gmA089853[]={CLAUSESEQ_begin(3,1),{2,0,0,5}};=A089840[6]*/作废gms U A089853(SEXP s)/*(a.(b.c))-->(c.(a.b))*/{SEXP光盘;if(对和对(cdr_s=cdr(s))){SEXP org_cadr=CAR(cdr_s);/*b*/把车(cdr_s,CAR(s));/*a设置到b的位置*/把车设为a的位置*/将\CDR(CDR_s,org_cadr);/*b设置为c的位置*/}}/*子句gmA089854[]={CLAUSESEQ_begin(3,1),{2,1,1}};=A089840[7]*/无效gms U A089854(SEXP s)/*((a.b.c)-->((b.a.c)*/{SEXP汽车;if(PAIR(s)&&PAIR(car_s=汽车)){SEXP org_caar=汽车(汽车);SET_CAR(车_s,CDR(CAR_s));SET-CDR(车辆、组织、caar);}}/*子句gmA072797[]={CLAUSESEQ_begin(3,1),{2,1,1,2}}};=A089840[8]*/无效gms U A072797(SEXP s)/*((a.b.c)-->((a.c.b)*/{如果(对和对(车)){SEXP org_cdr=cdr(s);设置_CDR(s,CDR(s)));设置车辆,组织车辆;}}/*子句gmA089855[]={CLAUSESEQ_begin(3,1),{2,1,1,3}};=A089840[9]*/无效gms U A089855(SEXP s)/*((a.b.c)-->((b.c.a)*/{SEXP汽车;if(PAIR(s)&&PAIR(car_s=汽车)){SEXP org_caar=汽车(美国);/*a*/将_CAR(CAR_s,CDR(CAR_s));/*b设置到a的位置*/将CDR/s(CDR/s)设置为“U”位置*/将_CDR(s,org_caar);/*a设置为c的位置*/}}/*子句gmA089856[]={CLAUSESEQ_begin(3,1),{2,1,1,4}}};=A089840[10]*/无效gms U A089856(SEXP s)/*((a.b.c)-->((c.b.a)*/{SEXP汽车;if(PAIR(s)&&PAIR(car_s=汽车)){SEXP org_caar=CAR(CAR_s);/*保存org.a*/SET_CAR(CAR_s,CDR(s));/*用c代替它*/将_CDR(s,org_caar);/*和org.a设置为c的位置*/}}/*子句gmA089857[]={CLAUSESEQ_begin(3,1),{2,1,1,5}};=A089840[11]*/无效gms U A089857(SEXP s)/*((a.b.c)-->((c.a.b)*/{SEXP汽车;if(PAIR(s)&&PAIR(car_s=汽车)){SEXP org_caar=汽车(美国);/*a*/将_CAR(CAR_s,CDR(s));/*c设置到a的位置*/将_CDR(s,CDR(car_s));/*b设置为c的位置*/将_CDR(car_s,org_caar);/*a设置为b的位置*/}}/*子句GMA04679[]={CLAUSESEQ_begin(4,2),{2,0,1,0,},{1,0,0,1}};=A089840[12]*//*执行更改(a.(b.c))-->((a.b.c)如果cdr端是一对,否则只需像gms U A069770那样交换*/无效gms U A074679(SEXP s){如果(对){SEXP org_car=汽车;如果(对(CDR(s))/*我们有(a.(b.rest))*/{SEXP org_cdr=cdr(s);SET_CAR(s,org_cdr);/*((b.rest.(b.rest))*/SET_CDR(s,CDR(org_CDR));/*((b.rest.rest)*/SET_CDR(org_CDR,CAR(org_CDR));/*((b.b.rest)*/SET_CAR(org_cdr,org_CAR);/*((a.b.rest)*/}其他的{SET_CAR(s,NULL);/*即=CDR(s)*/设置车辆;}}}/*执行更改((a.b.rest)-->(a.(b.rest))如果车侧是一对,否则就换成gms U A069770*/无效gms U A074680(SEXP s){如果(对){SEXP org_cdr=cdr(s);如果(对(辆车)/*我们有((a.b.rest)*/{SEXP org_car=汽车;设置\ CDR(s,org_car);/*((a.b.。(a.b))*/集合车(s,CAR(org U CAR));/*(a.(a.b))*/SET_CAR(org_CAR,CDR(org_CAR));/*(a.(b.b))*/SET_CDR(org_car,org_CDR);/*(a.(b.rest))*/}其他的{SET_CDR(s,NULL);/*即=车*/设置车辆(s,org_cdr);}}}/*子句gmA089865[]={CLAUSESEQ_begin(24,2),{3,3,4,0},{2,1,1}};=A089840[4207]*//*((a.(b.c)).d)-->((a.b.c).d),((a.().c)-->((().a.c)*//*无效gms U A089865(SEXP s){if(对){gms_A074679(车);}}*//*子句gmA089866[]={CLAUSESEQ_begin(24,2),{3,4,3,0},{2,1,1}};=A089840[4299]*//*((a.b.c.d)-->((a.(b.c)).d),((().b.c)-->((b.().c)*//*无效gms U A089866(SEXP s){if(对){gms_A074680(车);}}*//*执行此更改:A D\ /甲、乙、丙、乙、丙、乙、丙\/\/\/\/\/默认情况下:P M-->N C M[]-->N B[]A[]A\ / \ / \ / \ / \ / --> \ /X Y X Y X Y X Y*/无效gms U A082351(SEXP s){如果(对和对(车)){SEXP org_car=汽车;如果(!PAIR(CDR(s))){SET_CAR(s,NULL);/*即=CDR(s)*/设置车辆;org_car=NULL;}/*休息(a。b。现在轮到它了)*/{SEXP org_cdr=cdr(s);SET_CAR(s,org_cdr);/*((b.rest.(b.rest))*/SET_CDR(s,CDR(org_CDR));/*((b.rest.rest)*/SET_CDR(org_CDR,CAR(org_CDR));/*((b.b.rest)*/SET_CAR(org_cdr,org_CAR);/*((a.b.rest)*/}}}/*和另一个方向一样。gms_A082351的反向*/无效gms U A082352(SEXP s){如果(对和对(车)){if(!PAIR(CAR(s)){gms_A074680(s);gms_A069770(s);}其他{gms_A074680(s);}}}/*如果可能,请向右旋转二叉树并向下递归两个分支,否则应用交换并终止*/无效gms U A071655(SEXP s){如果(对){SEXP org_cdr=cdr(s);如果(对(辆车)/*我们有((a.b.rest)*/{SEXP org_car=汽车;设置\ CDR(s,org_car);/*((a.b.。(a.b))*/集合车(s,CAR(org U CAR));/*(a.(a.b))*/SET_CAR(org_CAR,CDR(org_CAR));/*(a.(b.b))*/SET_CDR(org_car,org_CDR);/*(a.(b.rest))*/gms U A071655(汽车);gms U A071655(CDR(s));}其他的{SET_CDR(s,NULL);/*即=车*/设置车辆(s,org_cdr);}}}/*gms U A071655的逆*/无效gms U A071656(SEXP s){如果(对){SEXP org_car=汽车;如果(对(CDR(s))/*我们有(a.(b.rest))*/{SEXP组织cdr;gms_A071656(汽车);/*首先向下递归*/gms_A071656(CDR(s));/*…在两个分支上,在执行robl之前*/org_cdr=cdr(s);SET_CAR(s,org_cdr);/*((b.rest.(b.rest))*/SET_CDR(s,CDR(org_CDR));/*((b.rest.rest)*/SET_CDR(org_CDR,CAR(org_CDR));/*((b.b.rest)*/SET_CAR(org_cdr,org_CAR);/*((a.b.rest)*/}其他的{SET_CAR(s,NULL);/*即=CDR(s)*/设置车辆;}}}/*如果robr不可能,则应用swap,否则在两个分支上向下递归,然后向右旋转二叉树*/无效gms U A071659(SEXP s){如果(对){SEXP org_cdr=cdr(s);如果(对(辆车)/*我们有((a.b.rest)*/{SEXP org_汽车;gms U A071659(汽车);gms U A071659(CDR(s));org_car=车;设置\ CDR(s,org_car);/*((a.b.。(a.b))*/集合车(s,CAR(org U CAR));/*(a.(a.b))*/SET_CAR(org_CAR,CDR(org_CAR));/*(a.(b.b))*/SET_CDR(org_car,org_CDR);/*(a.(b.rest))*/}其他的{SET_CDR(s,NULL);/*即=车*/设置车辆(s,org_cdr);}}}/*gms U A071659的逆*/无效gms U A071660(SEXP s){如果(对){SEXP org_car=汽车;如果(对(CDR(s))/*我们有(a.(b.rest))*/{SEXP org_cdr=cdr(s);SET_CAR(s,org_cdr);/*((b.rest.(b.rest))*/SET_CDR(s,CDR(org_CDR));/*((b.rest.rest)*/SET_CDR(org_CDR,CAR(org_CDR));/*((b.b.rest)*/SET_CAR(org_cdr,org_CAR);/*((a.b.rest)*/gms U A071660(汽车);/*然后向下递归*/gms_A071660(CDR(s));/*…在两个分支上,在完成robl之后*/}其他的{SET_CAR(s,NULL);/*即=CDR(s)*/设置车辆;}}}/*混合动力:执行更改(a.(b.rest))-->((a.b).rest)另一方面,如果另一方面*/无效gms U A082335(SEXP s){如果(对){SEXP org_car=汽车;如果(对(CDR(s))/*我们有(a.(b.rest))*/{SEXP org_cdr=cdr(s);SET_CAR(s,org_cdr);/*((b.rest.(b.rest))*/SET_CDR(s,CDR(org_CDR));/*((b.rest.rest)*/SET_CDR(org_CDR,CAR(org_CDR));/*((b.b.rest)*/SET_CAR(org_cdr,org_CAR);/*((a.b.rest)*/}其他{gms_A057163(s);}}}/*执行更改((a.b.rest)-->(a.(b.rest))如果车侧是一对,否则只需像gms U A057163一样反射*/无效gms U A082336(SEXP s){如果(对){SEXP org_cdr=cdr(s);如果(对(辆车)/*我们有((a.b.rest)*/{SEXP org_car=汽车;设置\ CDR(s,org_car);/*((a.b.。(a.b))*/集合车(s,CAR(org U CAR));/*(a.(a.b))*/SET_CAR(org_CAR,CDR(org_CAR));/*(a.(b.b))*/SET_CDR(org_car,org_CDR);/*(a.(b.rest))*/}其他{gms_A057163(s);}}}/*混合动力:执行更改(a.(b.rest))-->((a.b).rest)如果cdr侧是一对,否则应用gms U A069767*/无效gms U A082349(SEXP s){如果(对){SEXP org_car=汽车;如果(对(CDR(s))/*我们有(a.(b.rest))*/{SEXP org_cdr=cdr(s);SET_CAR(s,org_cdr);/*((b.rest.(b.rest))*/SET_CDR(s,CDR(org_CDR));/*((b.rest.rest)*/SET_CDR(org_CDR,CAR(org_CDR));/*((b.b.rest)*/SET_CAR(org_cdr,org_CAR);/*((a.b.rest)*/}其他{gms_A069767(s);}}}/*执行更改((a.b.rest)-->(a.(b.rest))如果轿厢侧是一对,则采用gms U A069768*/无效gms U A082350(SEXP s){如果(对){SEXP org_cdr=cdr(s);如果(对(辆车)/*我们有((a.b.rest)*/{SEXP org_car=汽车;设置\ CDR(s,org_car);/*((a.b.。(a.b))*/集合车(s,CAR(org U CAR));/*(a.(a.b))*/SET_CAR(org_CAR,CDR(org_CAR));/*(a.(b.b))*/SET_CDR(org_car,org_CDR);/*(a.(b.rest))*/}其他{gms_A069768(s);}}}内部尺寸(sexp s){if(!PAIR(s)){return(0);}其他的{return(1+size_of_sexp(s))+size_of_sexp(CDR(s));}}无效gms U A069771(SEXP s){int i=_sexp的大小;而(i--){gms_A057501(s);}}/*要做的:在这里实现这些:;; A085163变型:(定义(gma085171!s)(条件((空?s)(其他(适用于xrt!(gma085171!(s车))(附加!(地图gma085171!(cdr s))(列表(列表)))))))(定义A085171(catfun1 GMA0855171!));; 在我们意识到;; 应操纵S表达式:(definec(A085172 n)(让循环((i0))(条件((=n(A085171 i))i)(其他(循环(1+i)))))*/