Ci-dessous un exemple de comment écrire un premier p (qui est 1 modulo 4) comme une somme de deux carrés, en utilisant Mupad. Le logiciel Mupad est pas disponible gratuitement (voir le site http://www.mupad.de/), mais n'est pas libre dans le sens que la source n'est pas disponible). Je ne crois pas que mupad soit installé sur les machines de TP. Pour l'utilisation, Mupad ressemble à Maple, mais c'est déjà mieux car les objets sont typés. Mupad est l'un des deux logiciels qu'on peut utiliser pendant l'épreuve de modélisation de l'Agrégation. Les commentaires dans les lignes qui suivent commencent par ';', et ont étés ajoutées après le calcul. Le `prompt' de Mupad est `>>'. *----* MuPAD 1.4.2 -- The Open Computer Algebra System /| /| *----* | Copyright (c) 1997 - 1999 by SciFace Software | *--|-* All rights reserved. |/ |/ *----* UNREGISTERED VERSION Please contact info@sciface.com to register. Type ?demo, ?topics, ?news or ?changes for further information. >> p:=nextprime(10^30); 1000000000000000000000000000057 >> m:=(p-1)/4; 250000000000000000000000000014 >> m:=m/2; 125000000000000000000000000007 >> b:=powermod(2,m,p); 835456628479332117420647150048 >> b^2 mod p; 1000000000000000000000000000056 ; On définit la matrice x dont les 4 colonnes forment un système de ; générateurs (en tant que Z-module) de l'idéal de Z[i] engendré par p ; et c-i (la Z-base de Z[i] étant (1,i)). >> x:=[[p,0,b,1],[0,p,-1,b]]; [[1000000000000000000000000000057, 0, 835456628479332117420647150048, 1], [0, 1000000000000000000000000000057, -1, 835456628479332117420647150048]] ; Maintenant l'étape la plus compliquée: on appelle la fonction lllint ; qui effectue l'algorithme LLL, avec l'option `All', ce qui donne ; comme résultat un vecteur de deux matrices, dont la deuxième est une ; Z-base LLL-réduite du Z-module engendré par les colonnes de x. Pour ; la notion de LLL-réduite le lecteur est référé au livre par Henri ; Cohen cité dans le polycopié du cours. L'idée est que les éléments ; de cette base sont assez orthogonaux, et donc `petits'. >> y:=lllint(x,All); [[[-340822742317508, 762776268894901], [0, 0], [407947858332109, -913005227193276], [0, 0]], [ [913005227193276, 407947858332109], [-407947858332109, 913005227193276]]] >> z:=y[2]; [[913005227193276, 407947858332109], [-407947858332109, 913005227193276]] >> z[1][1]^2+z[2][1]^2; 1000000000000000000000000000057 >>