# OK to post # PART 1: 113 PROCEDURES: # ----------------------- Encode113G:=proc(x, q) local a,b,c,d,eqs,i,j,S,n: n:=nops(x); eqs:={seq(0=add(x[i],i=1..n)+((n+1)^j)*a+((n+2)^j)*b+((n+3)^j)*c+((n+4)^j)*d,j=0..3)}; S:=msolve(eqs,q); subs(S,[op(x),a,b,c,d]); end; Sy113G:=proc(x, q) local i,r,n: n:=nops(x); [seq(add(x[i]*i^(r-1),i=1..n) 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:=[]; for i1 from 0 to q-1 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: