#Do not post homework #Ramesh Balaji,3/10/2024,hw14 # Part 1: generalize procedures encode113, rv113, and syl113 #Adapted Code from Joseph Koutsoutis Encode113G := proc(x,q) local unk, eqns,a,b,c,d,eq1,eq2,eq3,eq4,i,S: eq1 := 0 = add(x[i], i=1..nops(x)) + add(unk[i], i=1..4); eq2 := 0 = add(i * x[i], i=1..nops(x)) + add((nops(x)+i)^1 * unk[i], i=1..4); print(eq2); eq3 := 0 = add(i^2 * x[i], i=1..nops(x)) + add((nops(x)+i)^2 * unk[i], i=1..4); eq4 := 0 = add(i^3 * x[i], i=1..nops(x)) + add((nops(x)+i)^3 * unk[i], i=1..4); S := msolve({eq1,eq2,eq3,eq4}, q): print(S); subs(S, [op(x), seq(unk[i],i=1..4)]): end: Sy113G := proc(x, q) local i,r: [seq(add(x[i]*i^(r-1),i=1..nops(x)) mod q,r=1..4)]: end: Decode113G:=proc(y,q) local S,eq,i,j,L,i1,a,b: S:=Sy113(y): if S=[0$4] then RETURN(y): fi: eq:=(S[2]^2-S[1]*S[3])*i^2+(S[1]*S[4]-S[2]*S[3])*i+ (S[3]^2-S[2]*S[4]) mod q: if eq=0 then i:=S[2]/S[1] mod q: a:=S[1]: RETURN(y-[0$(i-1),a,0$(nops(y)-i)] mod q): fi: #L is the list of roots of eq (mod q) L:=[]: for i1 from 0 to 10 do if subs(i=i1,eq) mod q=0 then L:=[op(L),i1]: fi: od: i:=L[1]: j:=L[2]: b:=(i*S[1]-S[2])/(i-j) mod q: a:=S[1]-b mod q: y-[0$(i-1),a,0$(j-i-1),b,0$(nops(y)-j)] mod q: end: