Java Printing - Erwan Biland
Transcription
Java Printing - Erwan Biland
Chercher les points d'une courbe sur un corps fini Erwan Biland - 10 février 2011 On s'intéresse à la courbe projective C d'équation x4 C y4 C z4 = 0, définie sur le corps F5 à 5 éléments. Pour simplifier, vu le rôle symétrique des variables, on prendra z = 1. La courbe C n'a clairement pas de point de degré 1 sur F5 . On trouve facilement, sur F 2 , le point 5 2 : 0 : 1 , qui fournit un point de degré 2 sur F5 . On cherche ensuite un point de degré 3. Le corps F 53 est le corps de rupture du polynôme irréductible t3 C t C 1. Notons en a une racine, et commençons par déterminer l'ordre de a dans le groupe multiplicatif F *3 . 5 id1:bda: while i ! 53 and b s 1 do i d iC1 : b d rem a$b, a3 C a C 1, a od : print i mod 5 62 (1) Comme 53 K 1 = 124 = 4$31, on obtient que a2 engendre le sous-groupe des éléments d'ordre impair dans F *3 , qui est aussi l'ensemble des éléments admettant une racine quatrième dans F *3 . On va donc chercher 5 5 x0 et y0 dans ce sous-groupe tels que x0 C y0 C 1 = 0. id1:jd1: x0 d a2 : y0 d a2 : somme d 2$a2 C 1 : while i ! 31 and somme s 0 do if j = i then i d i C 1 : j d 1 : x0 d rem a2 $x0 , a3 C a C 1, a : y0 d a2 : else j d j C 1 : y0 d rem a2 $y0 , a3 C a C 1, a : fi : somme d x0 C y0 C 1 mod 5 : od : if somme = 0 then print i, j else print "Aucun point trouvé" fi: 12, 2 (2) rem a 24 C a4 C 1, a3 C a C 1, a mod 5 0 On a donc trouvé sur F 53 (3) le point a6 : a : 1 , ce qui vérifie le résultat annoncé dans l'exposé (toute courbe projective lisse sur un corps fini possède des points de degrés premiers entre eux dans leur ensemble). A noter que j'avais annoncé qu'il n'y avait pas dans C de point de degré 3, mais qu'il y en avait de degré 5 ; la première partie est fausse (erreur de programmation...), mais la deuxième est vraie comme on le vérifie ci-dessous (avec le polynôme irréductible x5 K x K 1). id1:bda: while i ! 55 and b s 1 do i d iC1 : b d rem a$b, a5 K aK1, a mod 5 od : print i 781 (4) id1:jd1: x0 d a : y0 d a : somme d 2$a C 1 : while i ! 781 and somme s 0 do if j = i then i d i C 1 : j d 1 : x0 d rem a$x0 , a5 K a K 1, a : y0 d a : else j d j C 1 : y0 d rem a$y0 , a5 K a K 1, a : fi : somme d x0 C y0 C 1 mod 5 : od : if somme = 0 then print i, j else print "Aucun point trouvé" fi 163, 90 781 C 163 4 236 781$2 C 90 4 413 rem a 236$4 C a413$4 C 1, a5 K a K 1, a mod 5 0 D'où le point a236 : a413 : 1 . (8)