Trouver tous les entiers (a,b,c)(a,b,c) premiers entre eux vérifiant a 2=b 2+c 2a^2=b^2+c^2 pour aNa\leq N

Renée De Graeve

2020

Avant-propos

On se propose ici de chercher les triplets pythagoriciens c’est à dire les entiers (a,b,c)(a,b,c) premiers entre eux vérifiant a 2=b 2+c 2a^2=b^2+c^2 pour aNa\leq N.
Dans un premier temps, on va utiliser l’arithmétique pour connaître la parité ou la non parité de a,b,ca,b,c. Cela nous permettra de trouver l’expression de a,b,ca,b,c en fonction de deux entiers pp et qq premiers entre eux.
Puis on utilisera les triplets pythagoriciens pour trouver les points du cercle unité qui ont des coordonnées rationnelles.
On fera aussi le dessin des cercles de centre 00 et de rayon aNa\leq N qui contiennent des points à coordonnées entières.
Dans un deuxième temps, on procédera en sens inverse : on paramétre le cercle unité et on utilise la trigonométrie pour trouver les points du cercle unité qui ont des coordonnées rationnelles.
Puis on utilisera les points du cercle unité ayant des coordonnées rationnelles pour trouver l’expression des triplets pythagoriciens.

1  Des questions sur la parité et la non parité de a,b,ca,b,c

Dans cette section, on cherche les entiers (a,b,c)(a,b,c) premiers entre eux vérifiant a 2=b 2+c 2a^2=b^2+c^2 pour aNa\leq N. Puisque bb et cc sont interchangeables on ne donnera qu’un triplet et on supposera que (a,b,c)(a,b,c) sont des entiers non nuls (on ne met pas les solutions évidentes (a,a,0)(a,a,0)).
Si a 2=b 2+c 2a^2=b^2+c^2, que peut-on en conclure sur la parité de a,b,ca,b,c ?
Question1
a,b,ca,b,c peuvent-ils être des entiers pairs ?
Si a,b,ca,b,c sont des entiers pairs on a :


Réponse1
Non, a,b,ca,b,c ne peuvent pas être des entiers pairs puisque par hypothèse gcd(a,b,c)=1(a,b,c)=1
Question2
Si b,cb,c sont des entiers pairs est-ce que aa peut être un entier impair ?
Si b,cb,c sont des entiers pairs on a :


Réponse2
Si b,cb,c sont des entiers pairs, aa ne peut pas être un entier impair puisque :
a 2=b 2+c 2a^2=b^2+c^2 et b,cb,c pairs entraine que a 2a^2 est un multiple de 4 donc que aa est pair.
Question3
Si b,cb,c sont des entiers impairs et aa peut-il être un nombre entier ?
Si b,cb,c sont des entiers impairs on a :


Réponse3
Si b,cb,c sont des entiers impairs, aa ne peut pas être un nombre entier puisque : b,cb,c entiers impairs entraine a 2a^2 est divisible par 2 mais a 2a^2 n’est pas divisible par 4 donc aa ne peut pas être un nombre entier.
Question4
Si bb et cc ont une parité différente par exemple si bb est un entier impair et cc est un entier pair, aa peut-il être un entier pair ?
On a :


Réponse4
Si bb est un entier impair et cc est un entier pair alors b 2+c 21=4(k 2+m+m 2)b^2+c^2-1=4(k^2+m+m^2) donc a 2=4(k 2+m+m 2)+1a^2=4(k^2+m+m^2)+1, donc si aa est un entier alors aa est un entier impair.
ConclusionI
Si (a,b,ca,b,c) sont des entiers premiers entre eux vérifiant a 2=b 2+c 2a^2=b^2+c^2, bb et cc ne peuvent pas être tous les deux pairs, ni tous les deux impairs donc bb et cc ont une parité différente et aa sera un entier impair.
Puisque bb et cc sont interchangeables, on peut supposer dans ce qui suit que bb est un entier impair, cc est un entier pair et aa est un entier impair.

2  Encore des questions lorque aa et bb sont impairs

On suppose que a=2n+1a=2n+1, b=2m+1b=2m+1 avec n>mn>m. On pose c 2=a 2b 2c^2=a^2-b^2.
Question5
Montrer que c 2=2p 2q 2c^2=2p_2q_2 avec p 2<q 2p_2&lt;q_2 et donner l’expression de p 2p_2 et q 2q_2 en fonction de mm et nn.
On tape :


On définit p 2:=1+m+n;q 2:=nm;p_2:=1+m+n;q_2:=n-m;
Calculer p 2+q 2p_2+q_2 et p 2q 2p_2-q_2 et en déduire les valeurs de aa et bb en fonction de p 2p_2 et q 2q_2 :


Réponse5
On a donc :
p 2+q 2=ap_2+q_2=a et p 2q 2=bp_2-q_2=b et c 2=a 2b 2=4p 2q 2=(p 2+q 2) 2(p 2q 2) 2c^2=a^2-b^2=4p_2q_2=(p_2+q_2)^2-(p_2-q_2)^2
Question6
On suppose que a,b,ca,b,c vérifient a 2=b 2+c 2a^2=b^2+c^2 avec aa et bb impairs et cc pair et a,b,ca,b,c premiers entre eux.
On a définit p 2:=1+m+n;q 2:=nm;p_2:=1+m+n;q_2:=n-m;
Montrer que si a:=p 2+q 2;b:=p 2q 2;d:=a:=p_2+q_2;b:=p_2-q_2;d:=gcd(p 2,q 2)(p_2,q_2) alors d=1d=1.


Réponse6
On a donc: c 2=(a+b)*(ab)=4p 2q 2c^2=(a+b)*(a-b)=4p_2q_2, a+b=2p 2a+b=2p_2 et ab=2q 2a-b=2q_2.
Le pgcd dd de p 2p_2 et q 2q_2 divise a=p 2+q 2a=p_2+q_2, b=p 2q 2b=p_2-q_2 donc d 2d^2 divise c 2=a 2b 2=4p 2q 2c^2=a^2-b^2=4p_2q_2 donc dd divise cc. Puisque a,b,ca,b,c sont premiers entre eux, cela entraine d=1d=1.
Donc p 2p_2 et q 2q_2 sont premiers entre eux.
Question7
On suppose que a,b,ca,b,c vérifient a 2=b 2+c 2a^2=b^2+c^2 avec aa et bb impairs et que cc vérifie c 2=4p 2q 2c^2=4p_2q_2p 2p_2 et q 2q_2 sont des entiers premiers entre eux.
On pose p=p 2p=\sqrt{p_2} et q=q 2q=\sqrt{q_2}.
Montrer que pp et qq sont des entiers.
En déduire, en fonction de pp et qq, la valeur des entiers a,b,ca,b,c vérifiant a 2=b 2+c 2a^2=b^2+c^2.


Réponse7
On a c 2=a 2b 2=(a+b)(ab)=4p 2q 2c^2=a^2-b^2=(a+b)(a-b)=4p_2q_2.
Dans la décomposition en facteurs premiers de n 2=c 2/4=p 2q 2n^2=c^2/4=p_2q_2 les diviseurs premiers ont une puissance paire et chaque diviseur premier divise soit p 2p_2, soit q 2q_2 mais ne divise pas p 2p_2 et q 2q_2.
Donc p 2p_2 et q 2q_2 sont des carrés parfaits.
Donc il existe deux entiers pp et qq premiers entre eux et vérifiant p 2=p 2p^2=p_2 et q 2=q 2q^2=q_2 et on a :
a=p 2+q 2;b=p 2q 2;c=2pqa=p^2+q^2;b=p^2-q^2;c=2pq
Question8
Soient deux entiers mm et nn. Montrer que n+mn+m et abs(nm)(n-m) ont la même parité.
En déduire que pp et qq ont des parités différentes.


Réponse8
On pose k=nmk=n-m, on a donc n+m=2m+kn+m=2m+k ce qui entraine que n+mn+m et abs(nm)(n-m)=abs(k)(k) sont de même parité.
Donc p 2=p 2=1+n+mp^2=p_2=1+n+m et q 2=q 2=nmq^2=q_2=n-m ont des parités différentes.
Donc pp et qq ont des parités différentes.
ConclusionII
pp et qq ont des parités différentes.
On peut supposer que pp est un entier impair et qq est un entier pair à condition de définir bb par :
b:=abs(p^2-q^2) pour que bb soit un entier naturel.

3  Le programme tripletpytha

On écrit le programme tripletpytha(N) qui permet de donner la séquence L de tous les entiers a,b,ca,b,c qui vérifient : aNa\leq N, a 2=b 2+c 2a^2=b^2+c^2 et gcd(a,b,c)=1.
Puisque a=p 2+q 2Na=p^2+q^2\leq N avec pp impair et qq pair; pp varie, par pas de 2, de 1 jusque N4N-4 et qq varie, par pas de 2, de 2 jusque Np 2N-p^2.
Pour avoir gcd(a,b,c)=1 il faut de plus que gcd(p,q)=1.
Il faut à la fin trier la liste [L] selon les aa croissant.

3.1  La fonction tritri

On écrit la fonction tritri qui trie la séquence L dont les éléments sont des listes formées de trois réels (ici ce sera la liste formée par un triplet pythagoricien [a,b,c][a,b,c]).
On utilise pour cela la fonction trier de Xcas qui trie une liste selon la fonction donnée en second argument.
On tape :

//tritri(L):=trier([L],(x,y)->quand(x[0]==y[0],x[1]<y[1],x[0]<y[0])):;  
tritri(L):={local x,y;
  return trier([L],(x,y)->quand(simplify(x[0]-y[0]==0),x[1]<y[1],x[0]<y[0]));
    }:;

onload




3.2  Les programmes tripletpytha ettripletpytham

On écrit le programme tripletpytha qui renvoie la séquence des triplets d’entiers premiers entre eux et non nuls [a,b,c][a,b,c] vérifiant a 2=b 2+c 2a^2=b^2+c^2.

tripletpytha(N):={
  local L,a,p,q;
  L:=NULL;
  pour p de 1 jusque sqrt(N-4) pas 2 faire
     pour q de 2 jusque sqrt(N-p^2) pas 2 faire
        si (gcd(p,q)==1) alors
          L:=L,[p^2+q^2,abs(p^2-q^2),2*p*q];
        fsi;
      fpour; 
    fpour;
    return tritri(L);
    }:;

onload

On tape :






On écrit le programme tripletpytham qui renvoie la séquence des triplets d’entiers non premiers entre eux et non nuls [a,b,c][a,b,c] vérifiant a 2=b 2+c 2a^2=b^2+c^2.

tripletpytham(N):={
  local L,a,b,c,p,q,s,j,k,C;
  L:=NULL;C:=NULL;
  pour p de 1 jusque sqrt(N-4) pas 2 faire
     pour q de 2 jusque sqrt(N-p^2) pas 2 faire
        si (gcd(p,q)==1) alors
          L:=L,[p^2+q^2,abs(p^2-q^2),2*p*q];
        fsi;
      fpour; 
    fpour;
  L:=tritri(L);
  s:=size(L);
  pour j de 0 jusque s-1 faire
    k:=1;
    a:=L[j,0]; 
    tantque a*k<=N faire 
      b:=k*L[j,1]; 
      c:=k*L[j,2];
      C:=C,[a*k,b,c];
      k:=k+1;
    ftantque;
  fpour;
  return tritri(C);
}:;

onload

On tape :






4  Représentation des triplets pythagoriciens

En se servant du programme tripletpytha(N) précédent, on cherche à représenter les points à coordonnées dans \mathbb{Z} sur les cercles de centre 00 et de rayon un nombre entier aa.
Soit un cercle de centre 00 et de rayon aa et un point MM (resp NN) de coordonnées (b,c)(b,c) (resp (c,b)(c,b)) appartenant à \mathbb{Z}.
Donc (a,b,c)(a,b,c) vérifient :
b 2+c 2=a 2b^2+c^2=a^2 avec aa\in \mathbb{N} et (b,c) 2(b,c)\in \mathbb{Z}^2
cela signifie que (a,|b|,|c|)(a,|b|,|c|) est un triplet pythagoricien.
On écrit un programme qui trace les cercles qui contiennent des points à coordonnèes dans \mathbb{Z} avec ces points en rouge.
On tape le programme Cercletripletpyz0(z0,N) pour avoir les cercles de centre z0z0 et de rayon aNa\leq N et sur ces cercles les points b,cb,c et c,bc,b à coordonnées entières et leurs symétriques par rapport à z0z0,y=im(z0)y=im(z0) et x=re(z0)x=re(z0), lorsque a,b,ca,b,c sont premiers entre eux :

Cercletripletpyz0(z0,N):={
local L,C,a,b,c,s,j,r;
r:=ceil(N/130);
L:=tripletpytha(N);
s:=size(L);
C:=NULL;
pour j de 0 jusque s-1 faire
 a:=L[j,0];b:=L[j,1];c:=L[j,2];
 C:=C,cercle(z0,a),affichage(z0+cercle(b+i*c,r),1+rempli);
 C:=C,affichage(z0+cercle(-b+i*c,r),1+rempli);
 C:=C,affichage(z0+cercle(b-i*c,r),1+rempli);
 C:=C,affichage(z0+cercle(-b-i*c,r),1+rempli);
 C:=C,affichage(z0+cercle(c+i*b,r),1+rempli);
 C:=C,affichage(z0+cercle(-c+i*b,r),1+rempli);
 C:=C,affichage(z0+cercle(c-i*b,r),1+rempli);
 C:=C,affichage(z0+cercle(-c-i*b,r),1+rempli);
fpour;
return C;
}:;

onload








On tape le programme Cercletripletpymz0(z0,N) pour avoir les cercles de centre d’affixe z0z0 et de rayon aNa\leq N avec, sur ces cercles les points b,cb,c et c,bc,b à coordonnées entières et leurs symétriques par rapport à z0z0, y=im(z0)y=im(z0) et x=re(z0)x=re(z0), lorsque a,b,ca,b,c sont des entiers non premiers entre eux. On ne dessine pas les cercles de centre z0z0 et de rayon aa lorsque NN est très grand par exemple N>250N&gt;250.

Cercletripletpymz0(z0,N):={
local L,C,a,b,c,s,j,k;
L:=tripletpytha(N);
s:=size(L);
C:=NULL;
si N>250 alors C:=C,affichage(cercle(z0,N),rempli);fsi:
pour j de 0 jusque s-1 faire
 k:=1;
 a:=L[j,0]; 
 tantque a*k<=N faire 
   b:=k*L[j,1];c:=k*L[j,2];
   si N<=250 alors C:=C,cercle(z0,a*k);fsi;
   C:=C,affichage(z0+cercle(b+i*c,r),1+rempli);
   C:=C,affichage(z0+cercle(-b+i*c,r),1+rempli);
   C:=C,affichage(z0+cercle(b-i*c,r),1+rempli);
   C:=C,affichage(z0+cercle(-b-i*c,r),1+rempli);
   C:=C,affichage(z0+cercle(c+i*b,r),1+rempli);
   C:=C,affichage(z0+cercle(-c+i*b,r),1+rempli);
   C:=C,affichage(z0+cercle(c-i*b,r),1+rempli);
   C:=C,affichage(z0+cercle(-c-i*b,r),1+rempli);
   k:=k+1;
 ftantque;
fpour;
return C;
}:;

onload








5  Représentation des triplets pythagoriciens sur le cercle unité

En se servant du programme tripletpytha(N) précédent, on cherche à représenter les points à coordonnées dans QQ sur le cercle de centre 00 et de rayon 11.
On tape :

Cercletripletpyth1(N):={
local L,C,b,c,s,j;
L:=tripletpytha(N);
s:=size(L);
C:=NULL;
C:=C,cercle(0,1);
pour j de 0 jusque s-1 faire
 a:=L[j,0];b:=L[j,1];c:=L[j,2];
 C:=C,affichage(cercle(b/a+i*c/a,1/100),1+rempli);
 C:=C,affichage(cercle(-b/a+i*c/a,1/100),1+rempli);
 C:=C,affichage(cercle(b/a-i*c/a,1/100),1+rempli);
 C:=C,affichage(cercle(-b/a-i*c/a,1/100),1+rempli);
 C:=C,affichage(cercle(c/a+i*b/a,1/100),1+rempli);
 C:=C,affichage(cercle(-c/a+i*b/a,1/100),1+rempli);
 C:=C,affichage(cercle(c/a-i*b/a,1/100),1+rempli);
 C:=C,affichage(cercle(-c/a-i*b/a,1/100),1+rempli);
fpour;
return C;
}:;

onload





6  Autre méthode pour trouver les triplets phytagoriciens

6.1  Trouver les points du cercle unitéà coordonnées rationnelles

On peut se servir de ce qui précède pour trouver les triplets phytagoriciens d’une autre façon, à savoir, en cherchant les points à coordonnées rationnelles qui se trouvent sur le cercle unité.
On cherche, sur le cercle unité, les points de coordonnées (b/a,c/a)(b/a,c/a) (pour a,b,ca,b,c entiers vérifiant 0<b<a0&lt;b&lt;a et 0<c<a0&lt;c&lt;a) lorsque b/ab/a c/ac/a sont des fractions irréductibles.
On a donc (b/a) 2+(c/a) 2=1(b/a)^2+(c/a)^2=1 avec (a,b,c)(a,b,c) premiers entre eux.
On paramètre le cercle unité, pour cela , on pose : u=atan(c/b)u=\atan(c/b) et t=tan(u/2)t=\tan(u/2).
On a 0u<π/20\leq u&lt;\pi/2 donc 0u/2<π/40\leq u/2&lt;\pi/4 et 0t<10\leq t&lt;1,
b/a=x=cos(u)=1t 21+t 2\displaystyle b/a=x=\cos(u)=\frac{1-t^2}{1+t^2},
c/a=y=sin(u)=2t1+t 2\displaystyle c/a=y=\sin(u)=\frac{2t}{1+t^2} et
c/b=tan(u)=2t1t 2\displaystyle c/b=\tan(u)=\frac{2t}{1-t^2}
Donc il existe t]0,1[t \in ]0,1[ tel que :
ba=1t 21+t 2\displaystyle \frac{b}{a}=\frac{1-t^2}{1+t^2} et ca=2t1+t 2\displaystyle \frac{c}{a}=\frac{2t}{1+t^2}.
Montrons que tt est un rationnel.
tt est solution de ct 22at+c=0ct^2-2at+c=0 donc
t=(a±a 2c 2)/c=(a±b 2)/c=(a±b)/ct=(a\pm \sqrt{a^2-c^2})/c=(a\pm \sqrt{b^2})/c=(a\pm b)/c
Puisque t]0,1[t \in ]0,1[ on a t=(ab)/ct=(a-b)/c (puisque a,b,ca,b,c sont les côtés d’un triangle on a ab<c<a+ba-b&lt;c&lt;a+b).
On pose : t=p/qt=p/q avec pp et qq premiers ente eux et p<qp&lt;q.
On cherche a,b,ca,b,c entiers premiers entre eux vérifiant :
ca=2pqq 2+p 2\displaystyle \frac{c}{a}=\frac{2pq}{q^2+p^2} et ba=q 2p 2q 2+p 2\displaystyle\frac{b}{a}=\frac{q^2-p^2}{q^2+p^2} donc c 2a 2+b 2a 2=4p 2q 2+(q 2p 2) 2(q 2+p 2) 2\displaystyle \frac{c^2}{a^2}+\frac{b^2}{a^2}=\frac{4p^2q^2+(q^2-p^2)^2}{(q^2+p^2)^2} donc
c 2a 2+b 2a 2=1\displaystyle \frac{c^2}{a^2}+\frac{b^2}{a^2}=1
donc b 2+c 2=a 2b^2+c^2=a^2.
Valeur de a,b,ca,b,c en fonction de pp et qq
Puisque ca=2pqq 2+p 2\displaystyle \frac{c}{a}=\frac{2pq}{q^2+p^2} on a 2pqa=c(p 2+q 2)2pqa=c(p^2+q^2).
aa et cc sont premiers entre eux donc aa divise p 2+q 2p^2+q^2 i.e.
il existe kk tel que p 2+q 2=kap^2+q^2=ka on a alors :
c=2pqk\displaystyle c=\frac{2pq}{k}, b=q 2p 2k\displaystyle b=\frac{q^2-p^2}{k}
Pour que a,b,ca,b,c soient des entiers il faut et il suffit que kk divise p 2+q 2,q 2p 2,2pqp^2+q^2,q^2-p^2,2pq donc kk doit diviser 2p 2,2q 2,2pq2p^2,2q^2,2pq.
pp et qq sont premiers entre eux donc p 2p^2 et q 2q^2 sont premiers entre eux donc k=1k=1 ou k=2k=2.
Si k=1k=1 on a : a=p 2+q 2,b=q 2p 2,c=2pqa=p^2+q^2,b=q^2-p^2,c=2pq
Dans ce cas cc est pair et bb est impair mais on considère que le triplet par exemple 5,3,45,3,4 est le même que le triplet 5,4,35,4,3 (cela donnera bien sûr 2 points à coordonnées rationnelles sur le quart de cercle de centre 00 et de rayon 1).
Si k=2k=2 puisque kk divise p 2+q 2p^2+q^2 cela entaine que pp et qq sont impairs : posons p=2n+1p=2n+1 et q=2m+1q=2m+1, on a :
p 2+q 2=4(n 2+m 2+n+m)+2p^2+q^2=4(n^2+m^2+n+m)+2 q 2p 2=4(m 2n 2+mn)=4(mn)(m+n+1)q^2-p^2=4(m^2-n^2+m-n)=4(m-n)(m+n+1) on a alors :
a=2(n 2+m 2+n+m)+1a=2(n^2+m^2+n+m)+1, b=2(mn)(m+n+1)b=2(m-n)(m+n+1) et c=(2n+1)(2m+1)=pqc=(2n+1)(2m+1)=pq.
Lorsque k=2k=2 c’est bb qui est pair et cc est impair donc la solution a=p 2+q 2,b=q 2p 2,c=2pqa=p^2+q^2,b=q^2-p^2,c=2pq est égal à deux fois la solution lorsque p 1=mn;q 1=m+n+1p_1=m-n;q_1=m+n+1 avec a=p 1 2+q 1 2;b=2*p 1q 1;c=q 1 2p 1 2;a=p_1^2+q_1^2;b=2*p_1q_1;c=q_1^2-p_1^2;.
Remarque
Si la fraction p/qp/q est irréductible, la fraction p 1/q 1p_1/q_1 est aussi irréductible, en effet :
q 1:=m+n+1;p 1:=mn;q_1:=m+n+1;p_1:=m-n; donc
q 1+p 1=2m+1=qq_1+p_1=2m+1=q et q 1p 1=2n+1=pq_1-p_1=2n+1=p si kk divise p 1p_1 et q 1q_1 alors kk divise q 1+p 1=qq_1+p_1=q et q 1p 1=pq_1-p_1=p donc :
k=1k=1 donc la fraction p 1/q 1p_1/q_1 est irréductible.
Puisque p 1<pp_1&lt;p et q 1<qq_1&lt;q cette solution a été trouvée lorque k=1k=1.
On remarquera que :

Exemples :
p=1,q=2p=1,q=2 1/2>(2)11/2&gt;\sqrt(2)-1 on trouve p 2+q 2=5p^2+q^2=5, p 2q 2=3p^2-q^2=3, 2pq=42pq=4 ce qui donne le point de coordonnées 3/5,4/53/5,4/5
p=1,q=3p=1,q=3 1/3<(2)11/3&lt;\sqrt(2)-1 on trouve p 2+q 2=10p^2+q^2=10, p 2q 2=8p^2-q^2=8, 2pq=62pq=6 ce qui donne le point de coordonnées 4/5,3/54/5,3/5
p=2,q=3p=2,q=3 2/3>(2)12/3&gt;\sqrt(2)-1 on trouve p 2+q 2=13p^2+q^2=13, p 2q 2=5p^2-q^2=5, 2pq=122pq=12 ce qui donne le point de coordonnées 5/13,12/135/13,12/13
p=1,q=5p=1,q=5 1/5<(2)11/5&lt;\sqrt(2)-1 on trouve p 2+q 2=26p^2+q^2=26, p 2q 2=24p^2-q^2=24 2pq=102pq=10 ce qui donne le point de coordonnées 12/13,5/1312/13,5/13
p=1,q=4p=1,q=4 1/4<(2)11/4&lt;\sqrt(2)-1 on trouve p 2+q 2=17p^2+q^2=17, p 2q 2=15p^2-q^2=15, 2pq=82pq=8 ce qui donne le point de coordonnées 5/17,8/175/17,8/17
p=3,q=5p=3,q=5 3/5>(2)13/5&gt;\sqrt(2)-1 on trouve p 2+q 2=34p^2+q^2=34, p 2q 2=16p^2-q^2=16 2pq=302pq=30 ce qui donne le point de coordonnées 8/17,5/178/17,5/17
On écrit le programme tripletpythag(N) qui renvoie la liste des triplets pythagoriciens [a,b,c][a,b,c], (a 2=b 2+c 2a^2=b^2+c^2) pour aNa\leq N et triée selon les aa croissants.
Voici le programme qui utilise les points ayant des coordonnées rationnelles (b/a,c/a)(b/a,c/a) sur le cercle unité et qui renvoie la liste des triplets pytagoriciens a,b,ca,b,c lorsque a<=Na&lt;=N.
On tape :

tripletpythag0(N):={
local p,q,a,c,b,L;
L:=NULL;
pour q de 2 jusque sqrt(N-1) faire
pour p de 1 jusque q-1 faire
si gcd(p,q)=1 et (p^2+q^2<=N) alors 
c:=2*p*q;
b:=(q^2-p^2);
a:=p^2+q^2;
si gcd(a,b,c)=1 alors L:=L,[a,b,c] fsi;
fsi;
fpour;
fpour;
return tritri(L);
}:;

onload




6.2  Les points à coordonnées rationnelles sur le quart du cercle unité

On utilise la trigonométrie.
On pose u=atan(c/b)u=\atan(c/b) et t=tan(u/2)=p/qt=\tan(u/2)=p/q avec p<qp&lt;q et gcd(p,q)=1(p,q)=1.
Voici le programme qui affiche les points à coordonnées rationnelles b,cb,c et c,bc,b sur le quart de cercle unité lorsque 0<p<qN0&lt;p&lt;q\leq N, gcd(p,q)=1(p,q)=1 et p 2+q 2<=Np^2+q^2&lt;=N.
On doit éliminer les cas où (pp et qq) sont impairs donc on on ne prend en compte que lorsque (pp ou qq) sont pairs. On a donc :
1p<q1\leq p&lt;q, 2q2\leq q et (pp ou qq) sont pairs.
On tape :

tripletpythag1(N):={
local p,q,a,c,b,L,u;
L:=NULL;
pour q de 2 jusque sqrt(N-1) faire
pour p de 1 jusque q-1 faire
si gcd(p,q)=1 et (p^2+q^2<=N) et (est_pair(p) ou est_pair(q)) alors 
u:=2*atan(p/q);
b:=cos(u);
c:=sin(u);
L:=L,affichage(cercle(b+i*c,1/200),1+rempli);
L:=L,affichage(cercle(c+i*b,1/200),1+rempli);
fsi;
fpour;
fpour;
return L;
}:;

onload




6.3  Les points à coordonnées rationnelles sur le cercle unité

On pose u=atan(c/b)u=\atan(c/b) et t=tan(u/2)=p/qt=\tan(u/2)=p/q avec p<qp&lt;q et gcd(p,q)=1(p,q)=1.
Voici le programme qui affiche les points à coordonnées rationnelles p/qp/q avec leurs symétriques par rapport à y=xy=x,y=0y=0 et x=0x=0 sur le cercle unité lorsque 0<p<q<N0&lt;p&lt;q&lt;\sqrt{N}, pgcd(p,qp,q)=1 et p 2+q 2<Np^2+q^2&lt;N

tripletpythag2(N):={
local p,q,a,c,b,L,u;
L:=NULL;
pour q de 2 jusque sqrt(N-1) faire
pour p de 1 jusque q-1 faire
si gcd(p,q)=1 et (p^2+q^2<=N) et (est_pair(p) ou est_pair(q)) alors 
u:=2*atan(p/q);
b:=cos(u);
c:=sin(u);
L:=L,affichage([cercle(b+i*c,1/100),cercle(c+i*b,1/100),cercle(-c+i*b,1/100),cercle(c-i*b,1/100),cercle(b-i*c,1/100),cercle(-b+i*c,1/100),cercle(-b-i*c,1/100),cercle(-c-i*b,1/100)],1+rempli);
fsi;
fpour;
fpour;
return L;
}:;

onload




6.4  Les points b+i*cb+i*c à coordonnées entières sur les cercles de centre 0 et de rayon aNa\leq N lorsque gcd(a,b,ca,b,c)=1

On pose u=atan(c/b)u=\atan(c/b) et t=tan(u/2)=p/qt=\tan(u/2)=p/q avec p<qp&lt;q et gcd(p,q)=1(p,q)=1.
Voici le programme qui affiche les points à coordonnées entières b=p 2q 2b=p^2-q^2, c=2pqc=2pq avec leurs symétriques par rapport à y=xy=x, y=0y=0 et x=0x=0 sur les cercles de centre 00 et de rayon a=p 2+q 2a=p^2+q^2 lorsque 0<p<q<N0&lt;p&lt;q&lt;\sqrt{N}, gcd(p,q)=1(p,q)=1 et p 2+q 2<Np^2+q^2&lt;N.

tripletpythag3(N):={
local p,q,a,c,b,L,u,r;
r:=ceil(N/130);
L:=NULL;
pour q de 2 jusque sqrt(N-1) faire
pour p de 1 jusque q-1 faire
si gcd(p,q)=1 et (p^2+q^2<=N) et (est_pair(p) ou est_pair(q)) alors 
u:=2*atan(p/q);
b:=numer(simplify(halftan(cos(u))));
c:=numer(simplify(halftan(sin(u))));
a:=denom(simplify(halftan(cos(u))));
L:=L,cercle(0,a);
L:=L,affichage([cercle(b+i*c,r),cercle(c+i*b,r),cercle(-c+i*b,r),cercle(c-i*b,r),cercle(b-i*c,r),cercle(-b+i*c,r),cercle(-b-i*c,r),cercle(-c-i*b,r)],1+rempli);
fsi;
fpour;
fpour;
return L;
}:;

onload


On vérifie que les 2 méthodes donne le même résultat !


6.5  Les points à coordonnées entières sur les cercles de centre 0 et de rayon aNa\leq N lorsque gcd(a,b,c)(a,b,c)\neq 1

Les points à coordonnées entières b,cb,c sur les cercles de centre 0 et de rayon aNa\leq N lorsque [a,b,c][a,b,c] sont non premiers entre eux et non nuls [a,b,c][a,b,c].
On pose u=atan(c/b)u=\atan(c/b) et t=tan(u/2)=p/qt=\tan(u/2)=p/q avec p<qp&lt;q.
Voici le programme qui affiche tous les points à coordonnées entières b=p 2q 2b=p^2-q^2, c=2pqc=2pq avec leurs symétriques par rapport à y=xy=x, y=0y=0 et x=0x=0 sur les cercles de centre 00 et de rayon a=p 2+q 2a=p^2+q^2 lorsque 0<p<q<N0&lt;p&lt;q&lt;\sqrt{N}.
Lorsqu’on a obtenu un triplet [a,b1,c1][a,b1,c1]gcd(a,b,c)=1(a,b,c)=1, on en profite pour en déduire les triplets k*[a,b1,c1]k*[a,b1,c1] tantque a*kNa*k\leq N.
On ne dessine pas les cercles de centre z0z0 et de rayon aa lorsque NN est très grand par exemple N>250N&gt;250.
On tape :

tripletpythag4z0(z0,N):={
local p,q,a,c1,b1,b,c,C,u,k,r;
r:=ceil(N/130);
C:=NULL;
si N>250 alors C:=C,affichage(cercle(z0,N),rempli);fsi;
pour q de 2 jusque sqrt(N-1) faire
pour p de 1 jusque q-1 faire
si gcd(p,q)==1 et (p^2+q^2<=N) et (est_pair(p) ou est_pair(q)) alors 
u:=2*atan(p/q);
b1:=numer(simplify(halftan(cos(u))));
c1:=numer(simplify(halftan(sin(u))));
a:=denom(simplify(halftan(cos(u))));
k:=1;
tantque a*k<=N faire
   b:=b1*k;
   c:=c1*k;
   si N<=250 alors C:=C,cercle(z0,a*k);fsi;
   C:=C,affichage(z0+cercle(b+i*c,r),1+rempli);
   C:=C,affichage(z0+cercle(-b+i*c,r),1+rempli);
   C:=C,affichage(z0+cercle(b-i*c,r),1+rempli);
   C:=C,affichage(z0+cercle(-b-i*c,r),1+rempli);
   C:=C,affichage(z0+cercle(c+i*b,r),1+rempli);
   C:=C,affichage(z0+cercle(-c+i*b,r),1+rempli);
   C:=C,affichage(z0+cercle(c-i*b,r),1+rempli); 
   C:=C,affichage(z0+cercle(-c-i*b,r),1+rempli);
   k:=k+1;
ftantque;
fsi;
fpour;
fpour;
return C;
}:;

onload
On peut aussi écrire cette fonction autrement : on cherche tous les triplets [a,b,c][a,b,c] vérifiant gcd(a,b,c)=1(a,b,c)=1, puis on en déduit les triplets k*[a,b,c]k*[a,b,c] tantque a*kNa*k\leq N.
On ne dessine pas les cercles de centre z0z0 et de rayon aa lorsque NN est très grand par exemple N>250N&gt;250.
On tape :

tripletpythag5z0(z0,N):={
local L,p,q,a,c,b,C,u,j,k,s,r;
r:=ceil(N/130);
L:=NULL;
C:=NULL;
si N>250 alors C:=C,affichage(cercle(z0,N),rempli);fsi;
pour q de 2 jusque sqrt(N-1) faire
pour p de 1 jusque q-1 faire
si gcd(p,q)==1 et (p^2+q^2<=N) et (est_pair(p) ou est_pair(q)) alors 
u:=2*atan(p/q);
a:=denom(simplify(halftan(cos(u))));
b:=numer(simplify(halftan(cos(u))));
c:=numer(simplify(halftan(sin(u))));
L:=L,[a,b,c];
fsi;
fpour;
fpour;
s:=size(L);
pour j de 0 jusque s-1 faire
 k:=1;
 a:=L[j,0];
 tantque a*k<=N faire 
   b:=k*L[j,1]; 
   c:=k*L[j,2];
   si N<=250 alors C:=C,cercle(z0,a*k); fsi;
   C:=C,affichage(z0+cercle(b+i*c,r),1+rempli);
   C:=C,affichage(z0+cercle(-b+i*c,r),1+rempli);
   C:=C,affichage(z0+cercle(b-i*c,r),1+rempli);
   C:=C,affichage(z0+cercle(-b-i*c,r),1+rempli);
   C:=C,affichage(z0+cercle(c+i*b,r),1+rempli);
   C:=C,affichage(z0+cercle(-c+i*b,r),1+rempli);
   C:=C,affichage(z0+cercle(c-i*b,r),1+rempli); 
   C:=C,affichage(z0+cercle(-c-i*b,r),1+rempli);
   k:=k+1;
 ftantque;
fpour;
return C;
}:;

onload





  


This document was translated from LATEX by HEVEA.