256個の要素をもつ体 GF (2^8) を用いてＲＳ符号を構成する。
γ は (γ^8)+(γ^4)+(γ^3)+(γ^2)+1をみたす数とする。

GF (2^8) のすべての要素を加法表示と乗法表示したもののリストを作る。
toA は加法表示に直すため、toM は乗法表示に直すための関数。

minimal = (γ^8)+(γ^4)+(γ^3)+(γ^2)+1;

additive=Table[
PolynomialMod[γ^(254-i),{minimal ,2}],
{i,0,254}]~
Join~{0};
multiplicative=Table[γ^(254-i),{i,0,254}]~
Join~{0};

toA[elem_]:=PolynomialMod[elem,{minimal ,2}]

For[i= 1, i<256,i++,toM0[additive[[i]]]=γ^(255-i)];
toM0[0]=0;
toM[elem_]:=toM0[PolynomialMod[elem,{minimal ,2}]]

RS(n,k,d)
n:総ブロック数、k:情報ブロック数、d:最小距離（？）

n=35;k=17;

符号を生成する多項式は (n-k)次式 (x+1)(x+γ)…(x+γ^(n-k-1))

Table[toM[Coefficient[Product[x+γ^i,{i,0,n-k-1}],x,n-k-i]],
{i,0,n-k-1}]
generator =Collect[Product[x+γ^i,{i,0,n-k-1}],x,toM];

encode は k次元ベクトルを(n-1)次の符号多項式 （符号語） に直す関数。
まず k次元ベクトルから(k-1)次多項式を作り、それにx^(n-k)をかけて
(n-1)次多項式を作る。
さらに、それを生成多項式で割った余り（n-k-1次式）を加える。

decode はこれを元に戻す関数。生成多項式による商を取る。

Off[General::spell1]

encode[vector_]:=
Collect[
PolynomialMod[
vector.Table[x^(Length[vector]+n-k-i),{i,1,Length[vector]}]+
PolynomialMod[
vector.Table[x^(Length[vector]+n-k-i),{i,1,Length[vector]}],{generator,2}],2],
x,toM]

decode[polynomial_]:=
Map[toM,Table[Coefficient[polynomial,x,n-1-i],{i,0,k-1}]]

ＷｅｂサイトのＵＲＬ : "http://c-faculty.chuo-u.ac.jp/~kuwata/"

StringLength["kuwata@tamacc.chuo-u.ac.jp"]

IntegerDigits[%,2]

8 - bit モード : 0100
文字数 : 26 = 00011010

情報ベクトル１={{0,1,0,0},{0,0,0,1,1,0,1,0}}

情報ベクトル２=情報ベクトル１~Join~
Map[IntegerDigits[#+2^8,2][[2;;9]] &,
ToCharacterCode["kuwata@tamacc.chuo-u.ac.jp"]]~
Join~{{0,0,0,0}}

34-Length[Flatten[情報ベクトル２]]/8

情報ベクトル３=情報ベクトル２~Join~
{{1,1,1,0,1,1,0,0 },{0,0,0,1,0,0,0,1},{1,1,1,0,1,1,0,0 },{0,0,0,1,0,0,0,1},{1,1,1,0,1,1,0,0 },{0,0,0,1,0,0,0,1}}

情報ベクトル４=Partition[Partition[Flatten[情報ベクトル３],8],17]

Length[情報ベクトル４]

情報ベクトル５１=Map[toM[#.Table[(γ^((7-i))),{i,0,7}]]&,情報ベクトル４[[1]]]

情報ベクトル５２=Map[toM[#.Table[(γ^((7-i))),{i,0,7}]]&,情報ベクトル４[[2]]]

情報ベクトル５１、５２を３４次の符号多項式に直す。

符号多項式１=encode[情報ベクトル５１]
符号語１=Table[Coefficient[符号多項式１,x,34-i],
{i,0,34}]

符号多項式２=encode[情報ベクトル５２]
符号語２=Table[Coefficient[符号多項式２,x,34-i],
{i,0,34}]

符号語３=Mod[Map[Table[Coefficient[toA[#],γ,7-i],{i,0,7}] &,符号語１],2]~Join~
Mod[Map[Table[Coefficient[toA[#],γ,7-i],{i,0,7}] &,符号語２],2]

Length[符号語３]