Help:=proc(): print(`P(L),Q(L), Rev(L) , FibS(n) , wt(s,a) , Wt(S,a) ,TestQI(L,k) , PalSS(L), Reps(p), HS(p) `): end: ###stuff from C18.txt #C18.txt March 26, 2018, ExpMath (RU) Help18:=proc(): print(`RatToCF(x),NuToCF(x,n) , EvalCF(L), SymCF(a,n) `):end: #RatToCF(x): converts a pos. rational number x into a continued fraction RatToCF:=proc(x) local a,x1: if not (x>0 and type(x,rational)) then RETURN(FAIL): fi: a:=trunc(x): if a=x then RETURN([a]): fi: x1:=1/(x-a): [a, op(RatToCF(x1))]: end: #NuToCF(x,n): appx. a pos. number x into a continued fraction with <=n terms NuToCF:=proc(x,n) local a,x1: if not (x>0 and type(n,integer) and n>=1) then RETURN(FAIL): fi: a:=trunc(x): if n=1 then RETURN([a]): fi: if x=a then RETURN([a]): fi: x1:=1/(x-a): [a,op(NuToCF(x1,n-1))]: end: #EvalCF(L): evaluates the simple continued EvalCF:=proc(L) local L1,x: if not (type(L,list) and nops(L)>0) then RETURN(FAIL): fi: if nops(L)=1 then RETURN(L[1]): fi: L1:=[op(2..nops(L),L)]: x:=EvalCF(L1): normal(L[1]+1/x): end: #SymCF: the rational function of a[1], ..., a[n] describing EvalCF([a[1], ..., a[n]]): #the numerator followed by the denominator SymCF:=proc(a,n) local i,yonah: yonah:=EvalCF([seq(a[i],i=1..n)]): numer(yonah),denom(yonah): end: #The a-analog of the Fibonacci numbers, the numerator P:=proc(L) option remember: if L=[] then 1: elif nops(L)=1 then L[1]: else expand(L[1]*P([op(2..nops(L),L)])+ P([op(3..nops(L),L)])): fi: end: Q:=proc(L): P([op(2..nops(L),L)]): end: Rev:=proc(L) local i: [seq(L[nops(L)+1-i],i=1..nops(L))]:end: ################## #FibS(n): the set of sequences of {1,2} that add-up to n FibS:=proc(n) local S1,S2,s: option remember: if n=0 then RETURN({[]}): elif n=1 then RETURN({[1]}): else S1:=FibS(n-1): S2:=FibS(n-2): RETURN({seq([1,op(s)], s in S1),seq([2,op(s)], s in S2)}): fi: end: #wt(s,a): the weight of the sequence s wt:=proc(s,a) local i,p: p:=1: for i from 1 to nops(s) do if s[i]=1 then p:=p*a[convert([op(1..i,s)],`+`)]: fi: od: p: end: Wt:=proc(S,a) local s: add(wt(s,a),s in S):end: TestQI:=proc(L,k): if not (k<=nops(L) and k>=1) then RETURN(FAIL): fi: expand( P(L)- P([op(1..k,L)])*P([op(k+1..nops(L),L)]) -P([op(1..k-1,L)])*P([op(k+2..nops(L),L)]) ): end: #PalSS(L) PalSS:=proc(L) local L1,L2: if nops(L) mod 2=1 then RETURN(FAIL): fi: L1:=[op(1..nops(L)/2,L)]: L2:=[op(1..nops(L)/2-1,L)]: [P(L),[P(L1),P(L2)]]: end: #Reps(p): all the ways to represent p/i, i>p/2 as a P(L) Reps:=proc(p) local i: {seq(RatToCF(p/i),i=1..(p-1)/2)} minus {[p]}: end: HS:=proc(p) local gu,gu1: gu:=Reps(p): for gu1 in gu do if gu1=Rev(gu1) then RETURN(PalSS(gu1)): fi: od: FAIL: end: