cparen:=进程(e)
局部i、l、s、a、b、pa、pb、la、ee、e1、v、t、g;
选项记忆;
如果类型为(e,名称),则为1
elif类型(e,`+`)then
s:=0;ee:=转换(e,list);e1:=ee[1];ee:=底土(1=NULL,ee);
对于i,从0到nops(ee)-1 do
对于组合中的la[选择](ee,i)do
a:=e1+转换(la,`+`);b:=e-a;pa:=程序名(a);pb:=进程名称(b);s:=s+pa*pb;
日
od;
克:=0;
对于a in e,而g<>1 do g:=gcd(g,a)od;
如果g=1,则g:=[]elif类型(g,`*`),则g:=convert(g,list),否则g:=[g]fi;
g:=map(proc(t)if type(t,`^`)then op(1,t)$op(2,t)else t fi end,g);
对于i从1到nops(g)do
对于组合中的v[选择](g,i)do
a:=转换(v,`*`);t:=展开(e/a);s:=s+进程名(a)*进程名(t);
日
od;
秒
elif类型(e,`*`)或类型(e、`^`),然后
s:=0;
如果类型为(e,`*`),则ee:=转换(e,list)else ee:=[e]fi;
ee:=map(proc(t)if type(t,`^`)then op(1,t)$op(2,t)else t fi end,ee);
对于i从1到iquo(nops(ee),2)do
对于组合中的la[选择](ee,i)do
a:=转换(la,`*`);b:=e/a;
如果2*i=nops(ee)和op(1,{a,b})<>a,则下一个fi;
如果a=b,则s:=s+(进程名(a)*(1+进程名(a))/2;
其他s:=s+进程名(a)*进程名(b);
fi(菲涅耳)
日
od;
秒
else ERROR(“意外类型”,whattype(e),e)
fi(菲涅耳)
结束时间:
f:=程序(n)局部i;cparen(a[0,0]+加法(a[1,i]*T*X^i,i=0..n)结束: