TP 5 restart; Mise en place du corps K p:=3;m:=5; IiIk IiIm P:=X^5+X^4+X^2+1; LCoqJEkiWEc2IiIiJiIiIiokRiQiIiVGJyokRiQiIiNGJ0YnRic= alias(alpha=RootOf(P,X) mod p);#d\303\251finit l'extension K=F_p[alpha] de degr\303\251 m SSZhbHBoYUc2Ig== p^m; IiRWIw== Power(alpha,p^m-1) mod p ;Power(alpha,(p^m-1)/2) mod p; IiIi IiIj n:=p^m-1; IiRVIw== T:=Array(0..n-1,i->Power(alpha,i) mod p): LD:=proc(x) global T,n; local i; for i from 0 to n-1 do if T[i]=x then return i end if; end do; FAIL end proc: F:=i->p*i mod n; Zio2I0kiaUc2IkYlNiRJKW9wZXJhdG9yR0YlSSZhcnJvd0dGJUYlLUkkbW9kR0YlNiQqJkkicEdGJSIiIjkkRi5JIm5HRiVGJUYlRiU= Orb:=proc(i::nonnegint) description "calcule les classes cyclotomipues"; global n;local Omega,j; if i>=n then error "mauvais argument" end if; Omega:=[];j:=i; do Omega:=[op(Omega),j]; j:=F(j); if member(j,Omega) then return Omega end if; end do; FAIL; end proc: Orb(6); NyciIiciIz0iI2EiJGkiIiIj Construction du code BCH la distance apparente du code BCH delta:=8; IiIp L:=[seq(Orb(i),i=1..delta-1)]; Nyk3JyIiIiIiJCIiKiIjRiIjIik3JyIiIyIiJyIjPSIjYSIkaSI3J0YlRiZGJ0YoRiQ3JyIiJSIjNyIjTyIkMyIiIyMpNyciIiYiIzoiI1giJE4iIiRqIjcnRitGLEYtRi5GKjcnIiIoIiNAIiNqIiQqPSIjJCk= J :=convert({op(map(op,L))},list); NzsiIiIiIiMiIiQiIiUiIiYiIiciIigiIioiIzciIzoiIz0iI0AiI0YiI08iI1giI2EiI2oiIyIpIiMjKSIjJCkiJDMiIiROIiIkaSIiJGoiIiQqPQ== les racines du code rac:=map(i -> T[i],J); NztJJmFscGhhRzYiKiRGIyIiIyokRiMiIiQqJEYjIiIlLChGKUYmRiVGJkYmIiIiLCxGKUYsRidGJkYlRixGI0YmRixGLCwsRilGLEYnRixGJUYsRiNGLEYmRiwsKEYpRixGJUYmRiNGJiwqRilGLEYnRixGJUYmRiNGLCwmRilGLEYsRiwsLEYpRixGJ0YmRiVGLEYjRixGJkYsLChGJ0YsRiVGJkYjRiYsKkYnRixGJUYsRiNGJkYmRiwsKEYpRixGI0YsRiZGLCwsRilGLEYnRixGJUYmRiNGLEYsRiwsKkYpRixGJ0YsRiVGLEYjRiwsJkYlRixGJkYsLChGKUYmRidGLEYjRiwsKEYpRiZGJUYmRixGLCwsRilGLEYnRiZGJUYsRiNGLEYsRiwsLEYpRixGJ0YmRiVGJkYjRixGJkYsLCZGKUYsRiNGLCwqRidGLEYlRiZGI0YmRixGLCwqRilGLEYnRiZGJUYmRiNGLCwqRilGLEYnRiZGJUYsRiNGJg== le polyn\303\264me g\303\251n\303\251rateur g:=sort(Expand(mul(X-r,r in rac)) mod p,X); LEYqJEkiWEc2IiIjRCIiIiokRiQiI0NGJyokRiQiI0FGJyokRiQiI0BGJyokRiQiIz9GJyokRiQiIz0iIiMqJEYkIiM8RjIqJEYkIiM7RjIqJEYkIiM6RjIqJEYkIiM4RicqJEYkIiM3RjIqJEYkIiM1RicqJEYkIiIpRjIqJEYkIiIlRicqJEYkIiIkRicqJEYkRjJGJ0YkRjJGJ0Yn la dimension k:=n-degree(g,X); IiQ8Iw== le nombre de mots du code p^k; ImNxakBKTCNbIz4ibzE6QzM9cXF1bl5xOVdYZk1yWkByUzdRMTMlRzJjIVxAaSgqKnpXbDUmPVFWLFYk latex(g); {X}^{25}+{X}^{24}+{X}^{22}+{X}^{21}+{X}^{20}+2\134,{X}^{18}+2\134,{X}^{17}+2 \134,{X}^{16}+2\134,{X}^{15}+{X}^{13}+2\134,{X}^{12}+{X}^{10}+2\134,{X}^{8}+{X}^{4 }+{X}^{3}+{X}^{2}+2\134,X+1 IiRVIw== IiQ8Iw== un exemple de correction le mot re\303\247u fr := X^224+X^110+X^109+X^107+X^106+X^105+2*X^103+X^102+X^101+2*X^100+2*X^99+X^97+2*X^95+X^94+X^92+2*X^90+2*X^89+X^88+2*X^86+2*X^85+X^83+X^82+2*X^81+2*X^78+2*X^77+2*X^76+3*X^75+2*X^74+2*X^73+X^71+2*X^70+X^68+2*X^66+2*X^64+2*X^63+X^62+X^59+X^58+X^57+X^56+X^55+X^54+2*X^52+X^51+2*X^49+X^47+2*X^43+2*X^42+2*X^41+X^40+2*X^39+2*X^19; LGRxKiRJIlhHNiIiJEMjIiIiKiRGJCIkNSJGJyokRiQiJDQiRicqJEYkIiQyIkYnKiRGJCIkMSJGJyokRiQiJDAiRicqJEYkIiQuIiIiIyokRiQiJC0iRicqJEYkIiQsIkYnKiRGJCIkKyJGNCokRiQiIyoqRjQqJEYkIiMoKkYnKiRGJCIjJipGNCokRiQiIyUqRicqJEYkIiMjKkYnKiRGJCIjISpGNCokRiQiIyopRjQqJEYkIiMpKUYnKiRGJCIjJylGNCokRiQiIyYpRjQqJEYkIiMkKUYnKiRGJCIjIylGJyokRiQiIyIpRjQqJEYkIiN5RjQqJEYkIiN4RjQqJEYkIiN3RjQqJEYkIiN2IiIkKiRGJCIjdUY0KiRGJCIjdEY0KiRGJCIjckYnKiRGJCIjcUY0KiRGJCIjb0YnKiRGJCIjbUY0KiRGJCIja0Y0KiRGJCIjakY0KiRGJCIjaUYnKiRGJCIjZkYnKiRGJCIjZUYnKiRGJCIjZEYnKiRGJCIjY0YnKiRGJCIjYkYnKiRGJCIjYUYnKiRGJCIjX0Y0KiRGJCIjXkYnKiRGJCIjXEY0KiRGJCIjWkYnKiRGJCIjVkY0KiRGJCIjVUY0KiRGJCIjVEY0KiRGJCIjU0YnKiRGJCIjUkY0KiRGJCIjPkY0 andmap(r->evalb(Expand(subs(X=r,fr)) mod p = 0),rac); SSZmYWxzZUclKnByb3RlY3RlZEc= Rem(fr,g,X,'r') mod p; LEoqJEkiWEc2IiIjQSIiIyokRiQiI0AiIiIqJEYkIiM/RicqJEYkIiM+RicqJEYkIiM9RioqJEYkIiM7RicqJEYkIiM6RioqJEYkIiM5RioqJEYkIiM4RicqJEYkIiM1RicqJEYkIiIqRioqJEYkIiIpRioqJEYkIiIoRioqJEYkIiInRioqJEYkIiImRioqJEYkIiIlRicqJEYkIiIkRioqJEYkRidGJ0YkRipGJ0Yq le syndrome S:=sort(add((Expand(subs(X=rac[i],fr)) mod p)*X^(i-1),i=1..delta-1),X); LDgqJiwoKiRJJmFscGhhRzYiIiIlIiIiKiRGJiIiI0YrRiZGKUYpSSJYR0YnIiInRikqJiwqRiVGKyokRiYiIiRGK0YqRitGJkYrRilGLCIiJkYpKiYsKkYlRitGMEYrRiZGKUYrRilGKUYsRihGKSomLCZGKkYrRiZGKUYpRixGMUYpKiYsLEYlRitGMEYrRipGK0YmRitGKUYpRilGLEYrRikqJiwsRiVGK0YwRilGKkYrRiZGK0YpRilGKUYsRilGKUYlRitGJkYrRitGKUYwRilGKkYr r\303\251solution de l'\303\251quation cl\303\251 - algorithme de Euclide-Sugiyama R0:=X^(delta-1):R1:=S: U0:=1:U1:=0:V0:=0:V1:=1: do R2:=Rem(R0,R1,X,'Q') mod p; U2:=Expand(U0-Q*U1) mod p; V2:=Expand(V0-Q*V1) mod p; if degree(R2,X) < (delta-1)/2 then break end if; R0:=R1;R1:=R2; U0:=U1;U1:=U2; V0:=V1;V1:=V2; end do: R:=R2;U:=collect(U2,X);V:=collect(V2,X); LDAqJkkiWEc2IiIiI0kmYWxwaGFHRiUiIiUiIiIqJkYkRilGJ0YoRiYqJkYkRiZGJ0YpRiYqJkYkRilGJ0YpRiYqJEYnRiZGJkYkRiZGKUYp LCwqJiwoKiRJJmFscGhhRzYiIiIlIiIjKiRGJkYpIiIiRitGK0YrSSJYR0YnRilGKyomLCxGJUYrKiRGJiIiJEYpRipGK0YmRitGKUYrRitGLEYrRitGJUYpRi9GK0YmRis= LCwqJiwmKiRJJmFscGhhRzYiIiIlIiIjRiYiIiJGKkkiWEdGJyIiJEYqKiYsKEYlRioqJEYmRixGKSokRiZGKUYpRipGK0YpRioqJiwsRiVGKUYvRilGMEYqRiZGKUYpRipGKkYrRipGKkYvRilGMEYq C:=subs(X=0,V2); LCYqJEkmYWxwaGFHNiIiIiQiIiMqJEYkRiciIiI= sigma:=sort(collect(Expand(V2/C) mod p,X),X); LCoqJiwoKiRJJmFscGhhRzYiIiIlIiIjKiRGJiIiJEYpIiIiRixGLEkiWEdGJ0YrRiwqJiwqRiVGKUYqRiwqJEYmRilGLEYmRilGLEYtRilGLComLCZGJUYpRjBGLEYsRi1GLEYsRixGLA== omega:=sort(collect(Expand(R2/C) mod p,X),X); LDAqJiwoKiRJJmFscGhhRzYiIiIlIiIiKiRGJiIiJEYpIiIjRilGKUkiWEdGJ0YsRikqJiwoRiVGLCokRiZGLEYpRixGKUYpRi1GKUYpRiVGLEYqRilGMEYsRiZGLEYsRik= t:=degree(sigma); IiIk l'\303\251quation cl\303\251 est bien satisfaite Rem(Expand(S*sigma) mod p -omega ,X^(delta-1),X) mod p; IiIh racines du polyn\303\264me localisateur rc:=[]: for i from 0 to n-1 do r:=T[i]; if Expand(subs(X=r,sigma)) mod p =0 then rc:=[op(rc),evala(1/r) mod p] end if; if nops(rc)=t then break end if: end do: rc; NyUsKCokSSZhbHBoYUc2IiIiJSIiIyokRiVGKCIiIkYqRiosKkYkRioqJEYlIiIkRihGKUYqRiVGKiwqRiRGKkYsRipGJUYoRihGKg== d:=sort(map(LD,rc)); NyUiIz4iI3YiJEMj formule de Forney for j from 1 to t do z[j]:=T[n-d[j]]; c[j]:=-Normal(subs(X=z[j],omega)/subs(X=z[j],diff(sigma,X))) mod p; end do; LCYqJEkmYWxwaGFHNiIiIiUiIiMqJEYkIiIkIiIi IiIj LCgqJEkmYWxwaGFHNiIiIiQiIiJGJCIiI0YnRic= IiIi LCwqJEkmYWxwaGFHNiIiIiUiIiIqJEYkIiIkIiIjKiRGJEYqRidGJEYnRipGJw== IiIi l'erreur e:=add(c[i]*X^d[i],i=1..t); LCgqJEkiWEc2IiIkQyMiIiIqJEYkIiN2RicqJEYkIiM+IiIj le mot envoy\303\251 f:=sort(fr-e mod p,X); LGBxKiRJIlhHNiIiJDUiIiIiKiRGJCIkNCJGJyokRiQiJDIiRicqJEYkIiQxIkYnKiRGJCIkMCJGJyokRiQiJC4iIiIjKiRGJCIkLSJGJyokRiQiJCwiRicqJEYkIiQrIkYyKiRGJCIjKipGMiokRiQiIygqRicqJEYkIiMmKkYyKiRGJCIjJSpGJyokRiQiIyMqRicqJEYkIiMhKkYyKiRGJCIjKilGMiokRiQiIykpRicqJEYkIiMnKUYyKiRGJCIjJilGMiokRiQiIyQpRicqJEYkIiMjKUYnKiRGJCIjIilGMiokRiQiI3lGMiokRiQiI3hGMiokRiQiI3dGMiokRiQiI3ZGMiokRiQiI3VGMiokRiQiI3RGMiokRiQiI3JGJyokRiQiI3FGMiokRiQiI29GJyokRiQiI21GMiokRiQiI2tGMiokRiQiI2pGMiokRiQiI2lGJyokRiQiI2ZGJyokRiQiI2VGJyokRiQiI2RGJyokRiQiI2NGJyokRiQiI2JGJyokRiQiI2FGJyokRiQiI19GMiokRiQiI15GJyokRiQiI1xGMiokRiQiI1pGJyokRiQiI1ZGMiokRiQiI1VGMiokRiQiI1RGMiokRiQiI1NGJyokRiQiI1JGMg== le mot trouv\303\251 appartient bien au code andmap(r->evalb(Expand(subs(X=r,f)) mod p = 0),rac); SSV0cnVlRyUqcHJvdGVjdGVkRw== h:=Quo(f,g,X,'r') mod p; LCoqJEkiWEc2IiIjJikiIiIqJEYkIiN4IiIjKiRGJCIjZUYnKiRGJCIjUkYq r; IiIh