本网站由以下捐款支持:OEIS基金会.

用户:R。J.Mathar/变压器3

来自OeisWiki
跳转到:航行,搜索
#这是一个包含Maple程序的文件。在其他Maple程序中使用:#读取(“变压器3”);#读取参数中命名的b文件,并返回#第二列的编号。序列偏移量信息#未传输:返回的列表中的第一个数字只是#b文件中的最高值,可以是a(0)、a(1)或另一个#根据偏移量输入。##下载b000040.txt后获取质数列表的示例#从OEIS网页:#a:=文件列表(“b000040.txt”);##@param bfilename包含读取/扫描的输入文件的字符串。#@since 2010-09-06删除输入中的非ASCII字符#理查德·马塔尔(Richard J.Mathar),2010年2月20日BFILETOLIST:=进程(bfilename)局部a,f,bline,b,nold,n;#列表初始为空nold:=-999999;a:=[];f:=fopen(bfilename,READ):bline:=读行(f):#遍历整个b文件当bline<>0时#过去有过使用非ASCII字符的文件#(尤其是UTF代码的BOM标记)难以检测。#以下是尝试温和地处理此错误情况,#完全删除非ASCII字节。bline:=StringTools[Select](StringTools[IsASCII],bline);bline:=StringTools[TrimLeft](bline);#跳过带有注释的行如果StringTools[FirstFromLeft](“#”,bline)=1,则 ;其他的#将行内容解释为两个整数(索引和值)b:=sscanf(bline,“%d%d”);#抓取每行的第二个分量,即值;追加如果nops(b)>1,则a:=【op(a),op(2,b)】;n:=op(1,b);如果n<>nold+1和nold<>-999999,则printf(“#不连续的第一列%d%d\n”,nold,n);结束条件:;nold:=n;结束条件:;结束条件:;bline:=readline(f);结束do:fclose(f);返回(a);结束进程:#用第一个数字将列表“L”写入文件“bfilename”#考虑到偏移量“offs”。##警告:现有文件被覆盖。##示例:#L:=[seq(ithprime(i),i=1..20)];#列表文件(“B000040.txt”,L,1);#注意示例中的大写字母B,而不是现实生活中的大写。##理查德·马塔尔,2008-03-12LISTTOBFILE:=进程(bfilename,L,offs)局部n,f;f:=fopen(bfilename,写入):#循环列表成员n从1到nops(L)dofprintf(f,“%d%d\n”,n+offs-1,op(n,L));结束do:fclose(f);printf(“%%I A%6s\n”,子字符串(bfilename,2..7));printf(“%%H A%6s F.姓氏,n表,n的A(n)=%d..%d</A>\n”,子字符串(bfilename,2..7),子字符串;返回();结束进程:#读取b文件并用空格和组合替换制表符#通过<lf>。删除空行。#参数bfilename应该是可读的b文件名b??????。文本#(无目录组件)。结果将放置在名为#B??????。txt(所以这只是第一个字母被大写字母B替换),即#如果存在,则覆盖。#理查德·马塔尔,2009-03-10BFILE2BFILE:=进程(bfilename)局部f,fo,bline,b,n,boutname;f:=fopen(bfilename,READ):boutname:=sprintf(“B%6s.txt”,子字符串(bfilename,2..7));fo:=fopen(boutname,写入):bline:=读行(f):#遍历整个b文件;消除尾随空白行当bline<>0时#复制带注释的行如果StringTools[FirstFromLeft](“#”,bline)<>0,则fprintf(fo,“%s\n”,bline);其他的#将行内容解释为两个整数(索引和值)b:=sscanf(bline,“%d%d”);如果nops(b)>=2,则#抓取每行的第二个分量,即值;追加fprintf(fo,“%d%d\n”,op(1,b),op(2,b));fi;结束条件:;bline:=readline(f);结束do:fclose(f);fclose(fo);返回();结束时间:#将浮点常量转换为十进制数字序列。#@param c浮点常量#@根据OEIS指南返回保留零的列表。#列表的长度取决于数字的值#在通话时。我们假设两位数被截断#常数的值通常会四舍五入,而不是#截断。##示例:#康索利斯特(3.14159);#返回[3,1,4,1,5,9,0,0,…]#康索利斯特(59);#返回[5,9,0,0,0,..]##理查德·马塔尔,2008-09-19CONSTTOLIST:=进程(c)本地absc、a、dgs;#如果为负值,请确保其为正值absc:=abs(c);a:=[];#对于小于0.1的数字,从零开始以保持偏移量为0而absc<0.1 doa:=[op(a),0];绝对值:=10*绝对值;结束do:#dgs是小数点前absc的位数,即待打印的数字dgs:=1+ilog10(absc);#dgs是我们想将absc右移的位数,比digits多截断两位数字dgs:=数字2-dgs;absc:=地板(absc*10^dgs);a:=[op(a),op(ListTools[Reverse](convert(absc,base,10)))];返回(a);结束进程:#将浮点常量转换为以b为基数的数字序列。#@param c浮点常量#@param b基(2,3,…)#@根据OEIS指南返回保留零的列表。#列表的长度取决于数字的值#在通话时。我们假设两位数被截断#常数的值通常会四舍五入,而不是#截断。##示例:#CONSTTOLIST(评估(Pi/3),2);#返回1,0,0,0,1,。。。(请参见A019670型)#CONSTTOLIST(59,2);##理查德·马塔尔,2009-02-06CONSTTOLISTB:=进程(c,b)本地absc、a、dgs;#如果为负值,请确保其为正值absc:=abs(c);a:=[];#对于小于0.1的数字,从零开始以保持偏移量为0当absc<1/b do时a:=[op(a),0];absc:=b*absc;结束do:#dgs是小数点前absc的位数,即待打印的数字dgs:=1+楼层(log(absc)/log(b));#dgs是我们想将absc右移的位数,比digits多截断两位数字dgs:=数字2-dgs;absc:=地板(absc*b^dgs);a:=[op(a),op(ListTools[Reverse](convert(absc,base,b)))];返回(a);结束进程:#将序列转换为浮点常量。#参数是列表和(正确的)偏移量。#理查德·马塔尔,2009-02-02LISTTOCONST:=进程(L,关闭)局部c,n,dgs,realdigs;c:=0;差分:=0;n从1到nops(L)do如果dgs=0,则如果op(n,L)<>0,则差分:=1;结束条件:;其他的dgs:=dgs+1;结束条件:;c:=10*c+op(n,L);结束do:#将浮点转换的有效精度设置为#列表的长度(去掉前导零后)。realdigs:=数字;数字:=dgs;c:=评估(c*10^(off-nops(L)));数字:=实际数字;返回(c);结束进程:#列表L提供的序列的Motzkin变换。#这相当于在#L的生成函数x*M(x),其中M(x#用于Motzkin数的函数。##示例:#L:=[0,1,0,0,0,0,0,1,0];莫茨金(左);#返回[0,1,1,2,4,9,21,51,27]#L:=[0,1,0,1,0,0,1,1,01,0,1];莫茨金(左);#返回[0,1,1,3,7,19,511413931107,…]#L:=[1,0,1,0,1,1,0,0,1];莫茨金(左);#返回[1,0,1,2,6,16,4512635710162907,…]##理查德·马塔尔,2008-11-07MOTZKIN:=进程(L)局部d,bgf,mL,maxd;#输出列表初始为空#输出的最大程度受到初始长度L的限制最大值:=nops(L)-1;#生成Motzkin编号的辅助列表毫升:=泰勒(1-x-sqrt(1-2*x-3*x^2))/2/x,x=0,最大值+2);bgf:=op(1,L);对于从1到maxd do的dbgf:=bgf+taylor(op(d+1,L)*mL^d,x=0,maxd+1);结束do:[seq(coeftayl(bgf,x=0,d),d=0..maxd)];结束进程:#列表L提供的序列的逆Motzkin变换。#与上面MOTZKIN给出的操作相反。##理查德·马塔尔,2008-11-08MOTZKINi:=进程(L)局部d,bgf,mL,maxd;#输出列表初始为空#输出的最大程度受到初始长度L的限制最大值:=nops(L)-1;#生成Motzkin编号的辅助列表毫升:=泰勒(x/(1+x+x^2),x=0,最大值+2);bgf:=op(1,L);对于从1到maxd do的dbgf:=bgf+taylor(op(d+1,L)*mL^d,x=0,maxd+1);结束do:[seq(coeftayl(bgf,x=0,d),d=0..maxd)];结束进程:#列表L提供的序列的加泰罗尼亚变换。#这相当于在#用x*C(x)表示L的生成函数,其中C(x#用于加泰罗尼亚数字的函数。##理查德·马塔尔,2008-12-17目录:=进程(L)局部d,bgf,cL,maxd;#输出列表初始为空#输出的最大程度受到初始长度L的限制最大值:=nops(L)-1;#生成加泰罗尼亚数字的辅助列表cL:=泰勒((1-sqrt(1-4*x))/2,x=0,最大值+2);bgf:=op(1,L);对于从1到maxd do的dbgf:=bgf+taylor(op(d+1,L)*cL^d,x=0,maxd+1);结束do:[seq(coeftayl(bgf,x=0,d),d=0..maxd)];结束进程:#列表L提供的序列的逆加泰罗尼亚变换。#与上面CATALAN给出的操作相反。#理查德·马塔尔,2008-12-11CATALANi:=进程(L)局部d,bgf,cL,maxd;#输出列表初始为空#输出的最大程度受到初始长度L的限制最大值:=nops(L)-1;cL:=泰勒(x*(1-x),x=0,最大值+2);bgf:=op(1,L);对于从1到maxd do的dbgf:=bgf+taylor(op(d+1,L)*cL^d,x=0,maxd+1);结束do:#Maple 9中的错误:为了得到正确的结果,需要以下行bgf:=泰勒(bgf,x=0,最大值+1);[seq(coeftayl(bgf,x=0,d),d=0..maxd)];结束进程:#由常数生成的穿孔序列。#输入是一个介于0和1之间的数字,输出Pierce列表#膨胀系数。#理查德·马塔尔,2009-01-21穿孔:=程序(c)当地居民,L,i,an;残渣:=c;L:=[];如果whattype(c)=`float`那么如果c>0且c<=1,则因为我从一开始an:=地板(1./resi);L:=[op(L),an];resit:=evalf(1.-一个*resit);如果ilog10(mul(i,i=L))>0.7*位数,则断裂;结束条件:;结束do:结束条件:;结束条件:;L;结束进程:#由常数生成的恩格尔序列。#输入是一个介于0和1之间的数字,输出是恩格尔列表#膨胀系数。#理查德·马塔尔,2009-07-30ENGEL:=程序(c)当地居民,L,i,an;残渣:=c;L:=[];如果whattype(c)=`float`那么如果c>1,则返回([1,op(进程名(c-1.))]);elif c>0且c<=1,则因为我从一开始an:=天花板(1./resi);L:=[op(L),an];resit:=evalf(*残渣-1);如果ilog10(mul(i,i=L))>0.7*位数,则断裂;结束条件:;结束do:结束条件:;结束条件:;L;结束进程:#由常数生成的节拍序列。#理查德·马塔尔,2009-05-20美丽:=进程(c)局部L,n,x;L:=[];x:=评估(c);n从1到0.8*数字doL:=[op(L),floor(n*x)];结束do:L;结束进程:#列表L提供的序列的L-Schroeder变换。#这相当于在#用x*S(x)表示L的生成函数,其中S(x#函数用于较大的Schroeder数。##理查德·马塔尔,2008-11-13施罗德:=程序(L)局部d,bgf,mL,maxd;#输出列表初始为空#输出的最大程度受到初始长度L的限制最大值:=nops(L)-1;#生成Schroeder数字的辅助列表毫升:=泰勒((1-x-sqrt(1-6*x+x^2))/2,x=0,最大值+2);bgf:=op(1,L);对于从1到maxd do的dbgf:=bgf+taylor(op(d+1,L)*mL^d,x=0,maxd+1);结束do:[seq(coeftayl(bgf,x=0,d),d=0..maxd)];结束进程:#列表L提供的序列的逆L-Schroeder变换。#这相当于在#通过x*(1-x)/(1+x)生成L的函数。##示例:如果L为A001850号,函数返回后面跟着1的列表#由A001333号.#理查德·马塔尔,2008-11-13SCHROEDERi:=程序(L)局部d,bgf,mL,maxd;#输出列表初始为空#输出的最大程度受到初始长度L的限制最大值:=nops(L)-1;#生成Schroeder数字的辅助列表毫升:=泰勒((1-x)*x/(1+x),x=0,最大值+2);bgf:=op(1,L);对于从1到maxd do的dbgf:=bgf+taylor(op(d+1,L)*mL^d,x=0,maxd+1);结束do:[seq(coeftayl(bgf,x=0,d),d=0..maxd)];结束进程:#将参数L给出的列表减少为立即重复的列表#数字(即相同数字的簇)减少为一次出现。##示例:如果L包含[3,5,6,7,7,8,3,3,3,10],#然后返回的列表是[3,5,6,7,8,3,10],其中“7,7”缩小为“7”#“3,3,3”缩小到了“3”。##理查德·马塔尔,2008-05-03LISTNODUPL:=进程(L)局部b,a,aprev;#输出列表初始为空b:=[];#请注意,aprev未初始化,以避免与L[1]重合相等。对于L do中的a如果是aprev,则b:=[操作(b),a];结束条件:;aprev:=a;结束do:返回(b);结束进程:#将参数“L”给出的列表减少为仅包含簇的列表#2个或更多重复的数字。参数“multpl”是一个数字#大于0,指定#重复次数需要有(精确地)才能进入新列表,或者是0(零)#表示任何长度为2或2以上的簇将有一个代表#被放在返回的列表中。##示例:如果L包含[3,5,7,7,8,3,3,3,10,7,7,7,11]#则LISTDUPL(L,2)返回的列表为[7],表示#两个簇中的第一个为7。#示例:如果L包含[3,5,7,7,8,3,3,3,10,7,7,7,11]#则LISTDUPL(L,3)返回的列表为[3,7],表示#带3的集群和带7的第二集群,每个集群都显示#数字重复了3次。#示例:如果L包含[3,5,7,7,8,3,3,3,10,7,7,7,11,11]#则LISTDUPL(L,0)返回的列表为[7,3,7,11],它表示#两个7的星团,第二个3的星团#7分,最后一组11分。#示例:如果L包含[3,5,7,7,8,3,3,3,10,7,7,7,11,11]#则LISTDUPL(L,1)返回的列表为[3,5,8,10],表示#孤立的数字(长度为1的簇中的数字)。##获得不考虑#它们在原始列表中的位置,可以在调用之前进行排序#例程:LISTDUPL(sort(L),multpl);##理查德·马塔尔,2008-05-03LISTDUPL:=进程(L,multpl)局部b,a,aprev,cnt;如果multpl<0,则错误(“负多重性”,参数[2]);结束条件:;#输出列表初始为空b:=[];碳纳米管:=0;aprev:=op(1,L);对于L do中的a如果是aprev,则如果(cnt=multpl且multpl>0)或(cnt>1且multbl=0),则b:=【op(b),aprev】;结束条件:;碳纳米管:=1;其他的碳纳米管:=碳纳米管+1;结束条件:;aprev:=a;结束do:#此时,aprev表示最后一个集群中的一个数字。#OEIS中的列表通常在末尾不完整,如下所示#没有执行最后一个集群的长度检查,因为#这个集群的长度实际上可能比列表长#代表发言;这可能会导致误解,如果#都“满了”!#如果(cnt=multpl且multpl>0)或(cnt>1且multbl=0),则#b:=【op(b),aprev】;#结束条件:;如果cnt>1且multpl=0,则b:=【op(b),aprev】;结束条件:;返回(b);结束进程:#莱默无理数的余切表示。#示例#CONSTTOCOT(evalf(Pi));#看见A002667号#CONSTTOCOT(evalf(log(2)));#看见A081785号#Fritz Schweiger,Metrische Ergebnisse ueber den Kotangensa算法,《算术学报》。26 (1975) 217CONSTTOCOT:=进程(x)局部L,xcut;xcut:=x;L:=[楼层(xcut)];而类型(L[-1],‘不确定’)=false do电弧(L[-1])-电弧(xcut);xcut:=成本(evalf(%));L:=[op(L),floor(xcut)];结束do;返回底土(-1=NULL,L);结束进程:#o.g.f上的LOG转换操作。#输入列表L表示普通的[a0=1,a1,a2,a3,a4….]#生成函数,g=1+a1*x+a2*x^2+。。。。这是说第一个#默认L的元素等于1。##输出包含log(g)=sum_{i=1..inf}b(i)*x^i/i的系数。#理查德·马塔尔,2009-03-13逻辑:=进程(L)局部x,gf,gfl,i,a;gf:=加(op(i,L)*x^(i-1),i=2..nops(L));gfl:=0;对于i从1到nops(L)dogfl:=泰勒(gfl+gf^i/i,x=0,nops(L));结束do:a:=[];对于i从1到nops(L)-1 doa:=[op(a),i*系数(gfl,x=0,i)];结束do:a;结束进程:#Akiyama-Tanigawa算法,一步#带有L[0]、L[1]的输入列表L被转换为输出列表#A[0]、A[1]如中所述#D.Merlini,R.Sprugnoli,M.C.Verri,Akiyama-Tanigawa变换,整数,5(1)(2005)#A05#理查德·马塔尔2010-12-02AKIYATANI:=过程(L)局部a,k;a:=[];对于k从1到nops(L)-1 doa:=[op(a),k*(op(k,L)-op(k+1,L))];结束do;a;结束进程:#Akiyama-Tanigawa算法,生成第一列。#输入列表L被迭代转换以构造表的第一列。#D.Merlini,R.Sprugnoli,M.C.Verri,Akiyama-Tanigawa变换,整数,5(1)(2005)#A05#理查德·马塔尔2010-12-02AKIYAMATANIGAWA:=程序(L)局部a、r、img;a:=[op(1,L)];img:=L;对于r从1到nops(L)-1 doimg:=AKIYATANI(img);a:=[op(a),op(1,img)];结束do;a;结束进程:#Akiyama-Tanigawa反制表:给定列k=0,生成顶行。#理查德·马塔尔2010-12-02AKIYAMATANIGAWAi:=程序(L)局部a,r,img,k,行;img:=[op(-1,L)];从nops(L)-1到1 x-1 do的r行:=[op(r,L)];对于从2到1的k+nops(L)-r doop(k-1,行)-op(k-1、img)/(k-1);行:=[op(row),%];结束do;img:=行;结束do;img;结束进程:#给定Riordan数组的左条目d(x)和右条目h(x),#计算数组的(n,k)元素。#@param d x的函数#@param h x的函数#@param n行索引>=0#@param k列索引>=0#理查德·马塔尔2011-01-09RIORDAN:=进程(d,h,n,k)天小时;膨胀(%);coeftayl(%,x=0,n);结束进程:RIORDANEXP:=进程(d,h,n,k)RIORDAN(d,h,n,k)*n/k! ;结束进程:#生成多项式分区列表。#@param n各部分的一阶矩之和,sum_j j*p_j=n#@param k各部分之和,sum_j p_j=k#@param nparts部件数,sum_j 1=nparts#@param zIsPart如果为true,则约束为0<=p_j,否则为1<=p.j。#@return形式为[[p_1,p_2,p_3,…],[p_1,p_2,p2,…]]的列表#其中每个子列表是nparts中的一个分区,遵循两个约束。#除了p_j<=k之外,没有其他限制。一些p_j可能相等。#理查德·马塔尔(Richard J.Mathar),2011年4月6日多项式2q:=proc(n::integer,k::inter,nparts::intege,zIsPart::boolean)本地lpar、res、constrp;res:=[];如果n<0或nparts<=0,则 ;elif nparts=1,则如果n=k,则如果n>0或zIsPart,则返回[[n]];结束条件:;结束条件:;其他的对于来自`if`(zIsPart,0,1)do的lpar如果lpar*nparts>n或lpar>k,则断裂;结束条件:;#递归调用,假设lpar是最后一部分对于procname中的constrp(n-nparts*lpar,k-lpar,nparts-1,zIsPart)do如果nops(constrp)>0,则res:=[op(res),[op(constrp),lpar]];结束条件:;结束do:结束do:结束条件:;返回res;结束进程:#生成多项式分区列表。#@param n各部分的一阶矩之和,sum_j j*p_j=n#@param k各部分之和,sum_j p_j=k#@param zIsPart如果为true,则约束为0<=p_j,否则为1<=p.j。#@return形式为[[p_1,p_2,p_3,…],[p_1,p_2,p2,…]]的列表#其中每个子列表是一个遵循两个约束的分区。#除了1<=p_j<=k之外,没有其他限制。一些p_j可能相等。#第二类贝尔多项式就是这一点的应用。#请注意,子列表中的顺序很重要。#空分区(在n=k=0的情况下)不会作为空子列表返回,但根本不会返回。#示例:#多项式2(10,5,false)返回[[1,3,1],[2,1,2],其中1+3+1=5,1+2*3+3*1=10#对于第一个子列表和2+1+2=5,对于第二个子列表,2+2*1+3*2=10。#理查德·马塔尔(Richard J.Mathar),2011年4月6日多项式2:=proc(n::integer,k::inter,zIsPart::boolean)本地npart、res、constrp;res:=[];对于1 do的npart#最小的部分是1。因此sum_j j*p_j>=npart*(npart+1)/2=n表示#零件数量受到n的限制,只是程度较小#作者:k。如果npart*(npart+1)/2>n或npart>k,则返回res;结束条件:;#用固定数量的部件和#将这些解决方案附加到结果向量对于多项式2q(n,k,npart,zIsPart)中的consp,do如果nops(constrp)>0,则res:=[op(res),constrp];结束条件:;结束do:结束do:结束进程:#第二类贝尔多项式。#@参数n#@参数k#@param x x1,x2,x3的向量。。。#@return sum_{j1+j2+..=k,j1+2*j2+..=n}n/(j1!j2!…)(x1/1!)^j1(x2/2!)^j2。。。#理查德·马塔尔(Richard J.Mathar),2011年4月6日bell2:=proc(n::integer,k::intiger,x::list)局部p,npart,b,m,j;npart:=nops(x);b:=0;多项式2q(n,k,npart,true)中的p dom:=1;对于j从1到nops(p)dom:=m*(op(j,x)/j!)^op(j,p)/op(j,p)! ;结束do:b:=b+n*米;结束do:返回b;结束进程: