\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{xcolor}
\usepackage{color}
\usepackage{soul}
\newcommand{\asinh}{\,\,\mbox{asinh\,}}
\newcommand{\atanh}{\,\,\mbox{atanh\,}}
\newcommand{\atan}{\,\,\mbox{atan\,}}
\input{giac.tex}
\giacmathjax
\title{Trouver tous les entiers $(a,b,c)$ premiers entre eux v\'erifiant $a^2=b^2+c^2$ pour $a\leq N$}
\author{Ren\'ee De Graeve}
\date{2020}
\begin{document}
\begin{giacjshere}
\maketitle
\section*{Avant-propos}
On se propose ici de chercher les triplets pythagoriciens c'est \`a dire les 
entiers $(a,b,c)$ premiers entre eux v\'erifiant $a^2=b^2+c^2$ pour $a\leq N$.\\
Dans un premier temps, on va utiliser l'arithm\'etique pour connaître la 
parit\'e ou la non parit\'e de $a,b,c$. Cela nous permettra de trouver 
l'expression de $a,b,c$ en fonction de deux entiers $p$ et $q$ premiers entre eux.\\
Puis on utilisera les triplets pythagoriciens pour trouver 
les points du cercle unit\'e qui ont des coordonn\'ees rationnelles.\\
On fera aussi le dessin des cercles de centre $0$ et de rayon $a\leq N$ qui 
contiennent des points \`a coordonn\'ees enti\`eres.\\
Dans un deuxi\`eme temps, on proc\'edera en sens inverse : on param\'etre
le cercle unit\'e et on utilise la trigonom\'etrie pour trouver les points du 
cercle unit\'e qui ont des coordonn\'ees rationnelles.\\ 
Puis on utilisera les points du cercle unit\'e ayant des coordonn\'ees 
rationnelles pour trouver l'expression des triplets pythagoriciens.
\section{Des questions sur la parit\'e et la non parit\'e de $a,b,c$}
Dans cette section, on cherche les entiers $(a,b,c)$ premiers entre eux 
v\'erifiant $a^2=b^2+c^2$ pour $a\leq N$.
Puisque $b$ et $c$ sont interchangeables on ne donnera qu'un triplet et
on supposera que $(a,b,c)$ sont des entiers non nuls (on ne met pas les 
solutions \'evidentes $(a,a,0)$).\\
Si $a^2=b^2+c^2$, que peut-on en conclure sur la parit\'e de $a,b,c$ ?\\
{\bf Question1}\\
$a,b,c$ peuvent-ils \^etre des entiers pairs ?\\
Si $a,b,c$ sont des entiers pairs on a :\\
\giacinput{a:=2*n;b:=2*m;c:=2*k;gcd(a,b,c)}\\
{\bf R\'eponse1}\\ 
Non, $a,b,c$ ne peuvent pas \^etre des entiers pairs puisque par hypoth\`ese 
{\tt gcd}$(a,b,c)=1$\\ 
{\bf Question2}\\
Si $b,c$ sont des entiers pairs est-ce que $a$ peut \^etre un entier impair ?\\
Si $b,c$ sont des entiers pairs on a :\\
\giacinput{b:=2*m;c:=2*k;factor(b^2+c^2);}\\
{\bf R\'eponse2}\\ 
Si $b,c$ sont des entiers pairs, $a$ ne peut pas \^etre un entier impair 
puisque  :\\
$a^2=b^2+c^2$ et $b,c$ pairs entraine que $a^2$ est un multiple de 4 donc que 
$a$ est pair.\\
{\bf Question3}\\
Si $b,c$ sont des entiers impairs et $a$ peut-il \^etre un nombre entier ?\\
Si $b,c$ sont des entiers impairs on a :\\
\giacinput{b:=2*m+1;c:=2*k+1;factor(b^2+c^2-1);}\\
{\bf R\'eponse3}\\ 
Si $b,c$ sont des entiers impairs, $a$ ne peut pas \^etre un nombre entier 
puisque  : $b,c$  entiers impairs entraine $a^2$ est divisible par 2 mais $a^2$ 
n'est pas divisible par 4 donc $a$ ne peut pas \^etre un  nombre entier.\\
{\bf Question4}\\
Si $b$ et $c$ ont une parit\'e diff\'erente par exemple si $b$ est un entier 
impair et $c$ est un entier pair, $a$ peut-il \^etre un entier pair ?\\
On a :\\
\giacinput{b:=2*m+1;c:=2*k;factor(b^2+c^2-1);}\\
{\bf R\'eponse4}\\ 
Si  $b$ est un entier impair et $c$ est un entier pair alors 
$b^2+c^2-1=4(k^2+m+m^2)$  donc $a^2=4(k^2+m+m^2)+1$, donc si $a$ est un entier
alors $a$ est un entier impair.\\
{\bf ConclusionI}\\
Si ($a,b,c$) sont des entiers premiers entre eux v\'erifiant  $a^2=b^2+c^2$,
$b$ et $c$ ne peuvent pas être tous les deux pairs, ni tous les deux impairs 
donc $b$ et $c$ ont une parit\'e diff\'erente et $a$ sera un entier impair.\\
Puisque $b$ et $c$ sont interchangeables, on peut supposer dans ce qui suit que 
$b$ est un entier impair, $c$ est un entier pair et $a$ est un entier impair. 
\section{Encore des questions lorque $a$ et $b$ sont impairs}
On suppose que $a=2n+1$, $b=2m+1$ avec $n>m$. On pose $c^2=a^2-b^2$.\\
{\bf Question5}\\
Montrer que $c^2=2p_2q_2$ avec $p_2<q_2$ et donner l'expression de 
$p_2$ et $q_2$ en fonction de $m$ et $n$.\\
On tape :\\
\giacinputbig{a:=2*n+1:;b:=2*m+1:;factor(a^2-b^2);}\\
On d\'efinit  $p_2:=1+m+n;q_2:=n-m;$\\
Calculer $p_2+q_2$ et $p_2-q_2$ et en d\'eduire les valeurs de $a$ et $b$ en 
fonction de $p_2$ et $q_2$ :\\
\giacinputbig{p2:=1+m+n:;q2:=n-m:;normal(p2+q2,p2-q2);}\\
{\bf R\'eponse5}\\
On a donc :\\
$p_2+q_2=a$ et $p_2-q_2=b$ et $c^2=a^2-b^2=4p_2q_2=(p_2+q_2)^2-(p_2-q_2)^2$ \\
{\bf Question6}\\
On suppose que $a,b,c$ v\'erifient $a^2=b^2+c^2$ avec $a$ et $b$ impairs et $c$ pair et $a,b,c$ premiers entre eux.\\
On a d\'efinit  $p_2:=1+m+n;q_2:=n-m;$\\
Montrer que si $a:=p_2+q_2;b:=p_2-q_2;d:=${\tt gcd}$(p_2,q_2)$ alors $d=1$.\\ 
\giacinputbig{a:=normal(p2+q2);b:=normal(p2-q2);factor((a+b)*(a-b));}\\
{\bf R\'eponse6}\\ 
On a donc: $c^2=(a+b)*(a-b)=4p_2q_2$,  $a+b=2p_2$ et $a-b=2q_2$.\\
Le pgcd $d$ de $p_2$ et $q_2$ divise $a=p_2+q_2$, $b=p_2-q_2$ donc $d^2$ divise 
 $c^2=a^2-b^2=4p_2q_2$ donc $d$ divise $c$. Puisque $a,b,c$ sont premiers entre 
eux, cela entraine $d=1$.\\
 Donc $p_2$ et $q_2$ sont premiers entre eux. \\ 
{\bf Question7}\\
On suppose que $a,b,c$ v\'erifient $a^2=b^2+c^2$ avec $a$ et $b$ impairs et que 
$c$ v\'erifie $c^2=4p_2q_2$ o\`u $p_2$ et $q_2$ sont des entiers premiers entre 
eux.\\ 
On pose $p=\sqrt{p_2}$ et $q=\sqrt{q_2}$.\\
Montrer que $p$ et $q$ sont des entiers.\\
En d\'eduire, en fonction de $p$ et $q$, la valeur des entiers  
$a,b,c$ v\'erifiant $a^2=b^2+c^2$.\\
\giacinput{factor(a^2-b^2)}\\
{\bf R\'eponse7}\\ 
On a $c^2=a^2-b^2=(a+b)(a-b)=4p_2q_2$.\\
Dans la d\'ecomposition en facteurs premiers de $n^2=c^2/4=p_2q_2$ les diviseurs
 premiers ont une puissance paire et chaque diviseur premier
divise soit $p_2$, soit $q_2$ mais ne divise pas $p_2$ et $q_2$.\\ 
Donc $p_2$ et $q_2$ sont des carr\'es parfaits.\\
Donc il existe deux entiers $p$ et $q$ premiers entre eux et v\'erifiant 
$p^2=p_2$ et $q^2=q_2$ et on  a :\\ 
$a=p^2+q^2;b=p^2-q^2;c=2pq$\\
{\bf Question8}\\
Soient deux entiers  $m$ et $n$. Montrer que $n+m$ et {\tt abs}$(n-m)$ ont la 
m\^eme parit\'e.\\
En d\'eduire que $p$ et $q$ ont des parit\'es diff\'erentes.\\
\giacinput{k:=n-m;normal(2m+k)}\\
{\bf R\'eponse8}\\ 
On pose $k=n-m$, on a donc $n+m=2m+k$ ce qui entraine que $n+m$ et 
{\tt abs}$(n-m)$={\tt abs}$(k)$ sont de m\^eme parit\'e.\\
Donc $p^2=p_2=1+n+m$ et $q^2=q_2=n-m$ ont des parit\'es diff\'erentes.\\
Donc $p$ et $q$ ont des parit\'es diff\'erentes.\\
{\bf ConclusionII}\\
$p$ et $q$ ont des parit\'es diff\'erentes.\\
On peut supposer que $p$ est un entier impair et $q$ est un entier pair \`a 
condition de d\'efinir $b$ par : \\
{\tt b:=abs(p\verb|^|2-q\verb|^|2)} pour que $b$ soit un entier naturel.
\section{Le programme {\tt tripletpytha}}
On \'ecrit le programme {\tt tripletpytha(N)} qui permet  de donner la 
s\'equence {\tt L} de tous les entiers $a,b,c$ qui v\'erifient : 
$a\leq N$, $a^2=b^2+c^2$ et {\tt gcd(a,b,c)=1}.\\
Puisque $a=p^2+q^2\leq N$ avec $p$ impair et $q$ pair; $p$ varie, par pas de 2, 
de 1 jusque $N-4$ et $q$ varie, par pas de 2, de 2 jusque $N-p^2$.\\
Pour avoir {\tt gcd(a,b,c)=1} il faut de plus que {\tt gcd(p,q)=1}.\\
Il faut \`a la fin trier la liste {\tt [L]} selon les $a$ croissant.
\subsection{La fonction {\tt tritri}}
On \'ecrit la fonction {\tt tritri} qui trie la s\'equence {\tt L} dont les 
\'el\'ements sont des listes form\'ees de trois r\'eels (ici ce sera la liste 
form\'ee par un triplet pythagoricien $[a,b,c]$).\\
On utilise pour cela la fonction {\tt trier} de {\tt Xcas} qui trie une liste 
selon la fonction donnée en second argument.\\
On tape : 
\begin{giaconload}
//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]));
    }:;
\end{giaconload}
\giacinput{tritri([65,63,16],[61,11,60],[65,33,56])}\\
\giacinput{tritri([73,55,48],[89,39,80],[85,77,36],[85,13,84])}\\

\subsection{Les programmes {\tt tripletpytha} et{\tt tripletpytham}}
On \'ecrit le programme {\tt tripletpytha} qui renvoie la s\'equence des 
triplets d'entiers premiers entre eux et non nuls $[a,b,c]$ v\'erifiant
 $a^2=b^2+c^2$.
\begin{giaconload}
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);
    }:;
\end{giaconload}

On tape :\\
\giacinputbig{tripletpytha(49)}\\
\giacinputbig{tripletpytha(65)}\\
\giacinputbig{tripletpytha(101)}\\
On \'ecrit le programme {\tt tripletpytham} qui renvoie la s\'equence des 
triplets d'entiers {\bf non} premiers entre eux et non nuls $[a,b,c]$ 
v\'erifiant
 $a^2=b^2+c^2$.
\begin{giaconload}
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);
}:;
\end{giaconload}

On tape :\\
\giacinputbig{tripletpytham(49)}\\
\giacinputbig{tripletpytham(65)}\\
\giacinputbig{tripletpytham(101)}\\

\section{Repr\'esentation des triplets pythagoriciens}
En se servant du programme {\tt tripletpytha(N)} pr\'ec\'edent, on cherche \`a 
repr\'esenter les points \`a coordonn\'ees dans $\mathbb{Z}$ sur les cercles de 
centre $0$ et de rayon un nombre entier $a$.\\
Soit un cercle de centre $0$ et de rayon $a$ et un point $M$ (resp $N$) de 
coordonn\'ees $(b,c)$ (resp $(c,b)$) appartenant \`a $\mathbb{Z}$.\\
Donc $(a,b,c)$ v\'erifient :\\
$b^2+c^2=a^2$ avec $a\in \mathbb{N}$ et $(b,c)\in \mathbb{Z}^2$\\
cela signifie que  $(a,|b|,|c|)$ est un triplet pythagoricien.\\
On \'ecrit un programme qui trace les cercles qui contiennent des points \`a 
coordonn\`ees dans $\mathbb{Z}$ avec ces points en rouge.\\
On tape le programme {\tt Cercletripletpyz0(z0,N)} pour avoir les cercles de 
centre $z0$ et de rayon $a\leq N$ et sur ces cercles
les points $b,c$ et $c,b$ \`a coordonn\'ees enti\`eres et leurs sym\'etriques 
par rapport \`a $z0$,$y=im(z0)$ et $x=re(z0)$, lorsque $a,b,c$ sont premiers 
entre eux :
\begin{giaconload}
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;
}:;
\end{giaconload}
\giacinputbig{Cercletripletpyz0(0,65)}\\
\giacinputbig{Cercletripletpyz0(0,101)}\\
\giacinputbig{Cercletripletpyz0(0,151)}\\
\giacinputbig{Cercletripletpyz0(0,1800)}\\
On tape le programme {\tt Cercletripletpymz0(z0,N)} pour avoir les cercles de 
centre d'affixe $z0$ et de rayon $a\leq N$ avec, sur
ces cercles les points $b,c$ et $c,b$ \`a coordonn\'ees enti\`eres et leurs 
sym\'etriques par rapport \`a $z0$, $y=im(z0)$ et $x=re(z0)$, lorsque $a,b,c$ 
sont des entiers {\bf non} premiers entre eux. 
On ne dessine pas les cercles de centre $z0$ et de rayon $a$ lorsque $N$ est 
tr\`es grand par exemple $N>250$.
\begin{giaconload}
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;
}:;
\end{giaconload}
\giacinputbig{Cercletripletpymz0(0,65)}\\
\giacinputbig{Cercletripletpymz0(0,101)}\\
\giacinputbig{Cercletripletpymz0(0,151)}\\
\giacinputbig{Cercletripletpymz0(0,800)}\\
\section{Repr\'esentation des triplets pythagoriciens sur le cercle unit\'e}
%\subsection{Autre repr\'esentation des triplets pythagoriciens}
En se servant du programme {\tt tripletpytha(N)} pr\'ec\'edent, on cherche \`a 
repr\'esenter les points \`a coordonn\'ees dans $Q$ sur le cercle de 
centre $0$ et de rayon $1$.\\
On tape :
\begin{giaconload}
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;
}:;
\end{giaconload}
\giacinputbig{Cercletripletpyth1(49)}\\
\giacinputbig{Cercletripletpyth1(65)}\\
\giacinputbig{Cercletripletpyth1(101)}
\section{Autre m\'ethode pour trouver les triplets phytagoriciens}
\subsection{Trouver les points du cercle unit\'e\`a coordonn\'ees rationnelles}
On peut se servir de ce qui pr\'ec\`ede pour trouver les triplets 
phytagoriciens d'une autre fa\c{c}on, \`a savoir, en cherchant les points \`a 
coordonn\'ees rationnelles qui se trouvent sur le cercle unit\'e.\\
On cherche, sur le cercle unit\'e, les points de coordonn\'ees $(b/a,c/a)$  
(pour $a,b,c$ entiers v\'erifiant $0<b<a$ et $0<c<a$) lorsque $b/a$ $c/a$ sont 
des fractions irr\'eductibles.\\ 
On a donc $(b/a)^2+(c/a)^2=1$ avec $(a,b,c)$ premiers entre eux.\\
On param\`etre le cercle unit\'e, pour cela , on pose : $u=\atan(c/b)$ et 
$t=\tan(u/2)$.\\
On a $0\leq u<\pi/2$ donc $0\leq u/2<\pi/4$ et $0\leq t<1$,\\
$\displaystyle b/a=x=\cos(u)=\frac{1-t^2}{1+t^2}$,\\\
 $\displaystyle c/a=y=\sin(u)=\frac{2t}{1+t^2}$ et\\
$\displaystyle c/b=\tan(u)=\frac{2t}{1-t^2}$\\
Donc il existe $t \in ]0,1[$ tel que :\\
$\displaystyle \frac{b}{a}=\frac{1-t^2}{1+t^2}$ et $\displaystyle \frac{c}{a}=\frac{2t}{1+t^2}$.\\
{\bf Montrons que $t$ est un rationnel.}\\
 $t$ est solution de $ct^2-2at+c=0$ donc \\
$t=(a\pm \sqrt{a^2-c^2})/c=(a\pm \sqrt{b^2})/c=(a\pm b)/c$\\
Puisque $t \in ]0,1[$ on a $t=(a-b)/c$ (puisque $a,b,c$ sont les 
c\^ot\'es d'un triangle on a $a-b<c<a+b$).\\
On pose : $t=p/q$ avec $p$ et $q$ premiers ente eux et $p<q$.\\
On cherche $a,b,c$ entiers premiers entre eux v\'erifiant :\\
$\displaystyle \frac{c}{a}=\frac{2pq}{q^2+p^2}$ et $\displaystyle\frac{b}{a}=\frac{q^2-p^2}{q^2+p^2}$ donc
$\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 \\
$\displaystyle \frac{c^2}{a^2}+\frac{b^2}{a^2}=1$\\
donc $b^2+c^2=a^2$.\\
{\bf Valeur de $a,b,c$ en fonction de $p$ et $q$}\\
Puisque $\displaystyle \frac{c}{a}=\frac{2pq}{q^2+p^2}$ on a $2pqa=c(p^2+q^2)$.\\
$a$ et $c$ sont premiers entre eux donc $a$ divise $p^2+q^2$ i.e.\\
il existe $k$ tel que $p^2+q^2=ka$ on a alors :\\
$\displaystyle c=\frac{2pq}{k}$, $\displaystyle b=\frac{q^2-p^2}{k}$\\
Pour que $a,b,c$ soient des entiers il faut et il suffit que $k$ divise 
$p^2+q^2,q^2-p^2,2pq$ donc $k$ doit diviser $2p^2,2q^2,2pq$.\\
$p$ et $q$ sont premiers entre eux donc $p^2$ et $q^2$ sont premiers entre eux 
donc $k=1$ ou $k=2$.\\
Si $k=1$ on a : $a=p^2+q^2,b=q^2-p^2,c=2pq$\\
Dans ce cas $c$ est pair et $b$ est impair mais on consid\`ere que le triplet 
par exemple $5,3,4$ est le m\^eme que le triplet $5,4,3$ (cela donnera bien 
s\^ur 2 points \`a coordonn\'ees rationnelles sur le quart de cercle de centre 
$0$ et de rayon 1).\\
Si $k=2$ puisque $k$ divise $p^2+q^2$ cela entaine que $p$ et $q$ sont impairs :
posons $p=2n+1$ et $q=2m+1$, on a :\\
$p^2+q^2=4(n^2+m^2+n+m)+2$ $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)+1$, $b=2(m-n)(m+n+1)$ et $c=(2n+1)(2m+1)=pq$.\\
Lorsque $k=2$ c'est $b$ qui est pair et $c$ est impair donc la solution 
$a=p^2+q^2,b=q^2-p^2,c=2pq$ est \'egal \`a deux fois la solution lorsque
$p_1=m-n;q_1=m+n+1$ avec $a=p_1^2+q_1^2;b=2*p_1q_1;c=q_1^2-p_1^2;$.\\
{\bf Remarque} \\
Si la fraction $p/q$ est irréductible, la fraction $p_1/q_1$ est 
aussi irréductible, en effet : \\
$q_1:=m+n+1;p_1:=m-n;$ donc \\
$q_1+p_1=2m+1=q$ et $q_1-p_1=2n+1=p$ 
si $k$ divise $p_1$ et $q_1$ alors $k$ divise $q_1+p_1=q$ et $q_1-p_1=p$ donc :\\
$k=1$ donc la fraction $p_1/q_1$ est  irréductible.\\
Puisque  $p_1<p$ et $q_1<q$ cette solution a \'et\'e trouv\'ee lorque $k=1$.\\
On remarquera que :
\begin{itemize}
\item si $p/q<\atan(\pi/8)=\sqrt(2)-1$ et si {\tt gcd(p,q)=1} le point
de coordonn\'ees $(q^2-p^2)/(q^2+p^2),c=2pq/(q^2+p^2)$ se trouve sur le cercle 
unit\'e avec un angle au centre compris entre 0 et $\pi/4$,
\item si $p/q<\atan(\pi/8)=\sqrt(2)-1$  et si {\tt gcd(p,q)=2} le point de 
coordonn\'ees $(q_1^2-p_1^2)/(q_1^2+p_1^2),c=2p_1q_1/(q_1^2+p_1^2)$ se trouve sur 
le cercle unit\'e avec un angle au centre compris entre $\pi/4$ et $\pi/2$,
\item si $p/q>\atan(\pi/8)=\sqrt(2)-1$ et si {\tt gcd(p,q)=1} le point de 
coordonn\'ees $(q^2-p^2)/(q^2+p^2),c=2pq/(q^2+p^2)$ se trouve sur le cercle 
unit\'e avec un angle au centre compris entre $\pi/4$ et $\pi/2$,
\item si $p/q>\atan(\pi/8)=\sqrt(2)-1$ et si {\tt gcd(p,q)=2} le point de 
coordonn\'ees $(q_1^2-p_1^2)/(q_1^2+p_1^2),c=2p_1q_1/(q_1^2+p_1^2)$ se trouve sur 
le cercle unit\'e avec un angle au centre compris entre 0 et $\pi/4$.\\
\end{itemize}
{\bf Exemples :}\\
$p=1,q=2$ $1/2>\sqrt(2)-1$ on trouve $p^2+q^2=5$, $p^2-q^2=3$, $2pq=4$ ce qui
donne le point de coordonn\'ees $3/5,4/5$\\
$p=1,q=3$ $1/3<\sqrt(2)-1$ on trouve $p^2+q^2=10$, $p^2-q^2=8$, $2pq=6$ ce qui
donne le point de coordonn\'ees $4/5,3/5$\\
$p=2,q=3$ $2/3>\sqrt(2)-1$ on trouve $p^2+q^2=13$, $p^2-q^2=5$, $2pq=12$ ce qui
donne le point de coordonn\'ees $5/13,12/13$\\
$p=1,q=5$ $1/5<\sqrt(2)-1$ on trouve $p^2+q^2=26$, $p^2-q^2=24$ $2pq=10$ ce qui
donne le point de coordonn\'ees $12/13,5/13$\\
$p=1,q=4$ $1/4<\sqrt(2)-1$ on trouve $p^2+q^2=17$, $p^2-q^2=15$, $2pq=8$ ce qui
donne le point de coordonn\'ees $5/17,8/17$\\
$p=3,q=5$ $3/5>\sqrt(2)-1$ on trouve $p^2+q^2=34$, $p^2-q^2=16$ $2pq=30$ ce qui
donne le point de coordonn\'ees $8/17,5/17$\\
On \'ecrit le programme {\tt tripletpythag(N)} qui renvoie la liste des triplets
pythagoriciens $[a,b,c]$, ($a^2=b^2+c^2$) pour $a\leq N$ et triée selon les $a$ 
croissants.\\
Voici le programme qui utilise les points ayant des coordonn\'ees rationnelles 
$(b/a,c/a)$ sur le cercle unit\'e et qui renvoie la liste des triplets 
pytagoriciens $a,b,c$ lorsque $a<=N$.\\
On tape :
\begin{giaconload}
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);
}:;
\end{giaconload}
\giacinput{tripletpythag0(115)}\\
\giacinput{tripletpythag0(215)}\\
\subsection{Les points à coordonnées rationnelles sur le quart du cercle unit\'e}
On utilise la trigonom\'etrie.\\
On pose $u=\atan(c/b)$ et $t=\tan(u/2)=p/q$ avec $p<q$ et {\tt gcd}$(p,q)=1$.\\
Voici le programme qui affiche les points à coordonnées rationnelles $b,c$ et 
$c,b$ sur le quart de cercle unit\'e lorsque $0<p<q\leq N$, {\tt gcd}$(p,q)=1$  
et $p^2+q^2<=N$.\\
On doit \'eliminer les cas o\`u ($p$ et $q$) sont  impairs donc on 
on ne prend en compte que lorsque ($p$ ou $q$) sont pairs.
On a donc :\\
$1\leq p<q$, $2\leq q$ et ($p$ ou $q$) sont pairs.\\
On tape :\\
\begin{giaconload}
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;
}:;
\end{giaconload}
\giacinput{tripletpythag1(115)}\\
\giacinput{tripletpythag1(215)}\\
\subsection{Les points à coordonnées rationnelles sur le cercle unit\'e}
On pose $u=\atan(c/b)$ et $t=\tan(u/2)=p/q$ avec $p<q$ et {\tt gcd}$(p,q)=1$.\\
Voici le programme qui affiche les points à coordonnées rationnelles $p/q$ avec 
leurs sym\'etriques par rapport \`a $y=x$,$y=0$ et $x=0$
sur le cercle unit\'e lorsque $0<p<q<\sqrt{N}$, pgcd($p,q$)=1 et $p^2+q^2<N$  
\begin{giaconload}
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;
}:;
\end{giaconload}
\giacinput{tripletpythag2(115)}\\
\giacinput{tripletpythag2(215)}\\
\subsection{Les points $b+i*c$ \`a coordonnées enti\`eres sur les cercles de centre 0 et de rayon $a\leq N$ lorsque gcd($a,b,c$)=1}
On pose $u=\atan(c/b)$ et $t=\tan(u/2)=p/q$ avec $p<q$ et {\tt gcd}$(p,q)=1$.\\
Voici le programme qui affiche les points à coordonnées enti\`eres $b=p^2-q^2$, 
$c=2pq$ avec leurs sym\'etriques par rapport \`a $y=x$, $y=0$ et $x=0$ sur les 
cercles de centre $0$ et de rayon $a=p^2+q^2$ lorsque $0<p<q<\sqrt{N}$, 
{\tt gcd}$(p,q)=1$ et $p^2+q^2<N$.  
\begin{giaconload}
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;
}:;
\end{giaconload}
\giacinput{tripletpythag3(600)}\\
On v\'erifie que les 2 m\'ethodes donne le m\^eme r\'esultat !\\
\giacinputbig{tripletpythag3(115),Cercletripletpyz0(250,115)}\\

\subsection{Les points \`a coordonnées enti\`eres sur les cercles de centre 0 et de rayon $a\leq N$ lorsque gcd$(a,b,c)\neq$ 1}
Les points \`a coordonnées enti\`eres $b,c$ sur les cercles de centre 0 et de 
rayon $a\leq N$ lorsque $[a,b,c]$ sont {\bf non} premiers entre eux et non nuls $[a,b,c]$.\\
On pose $u=\atan(c/b)$ et $t=\tan(u/2)=p/q$ avec $p<q$.\\
Voici le programme qui affiche tous les points à coordonnées enti\`eres 
$b=p^2-q^2$, $c=2pq$ avec leurs sym\'etriques par rapport \`a $y=x$, $y=0$ et $x=0$ sur les cercles de centre $0$ et de rayon $a=p^2+q^2$ lorsque $0<p<q<\sqrt{N}$.\\
Lorsqu'on a obtenu un triplet $[a,b1,c1]$ o\`u {\tt gcd}$(a,b,c)=1$, on en 
profite pour en d\'eduire les triplets $k*[a,b1,c1]$ tantque $a*k\leq N$.\\
On ne dessine pas les cercles de centre $z0$ et de rayon $a$ lorsque $N$ est 
tr\`es grand par exemple $N>250$.\\
On tape : 
\begin{giaconload}
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;
}:;
\end{giaconload}
On peut aussi \'ecrire cette fonction autrement : on cherche tous les triplets 
$[a,b,c]$ v\'erifiant {\tt gcd}$(a,b,c)=1$, puis on en d\'eduit les triplets 
$k*[a,b,c]$ tantque $a*k\leq N$.\\
On ne dessine pas les cercles de centre $z0$ et de rayon $a$ lorsque $N$ est 
tr\`es grand par exemple $N>250$.\\
On tape : 
\begin{giaconload}
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;
}:;
\end{giaconload}
\giacinputbig{tripletpythag4z0(0,155)}\\
\giacinputbig{tripletpythag5z0(0,155)}\\
\giacinputbig{tripletpythag4z0(0,800)}
\end{giacjshere}
\end{document}
************************************
***********************************

   C:=C,[cercle(z0,a*k),affichage(z0+cercle(z0+b+i*c),1+point_point+epaisseur_point_2)];
    C:=C,[affichage(cercle(z0-b+i*c),1+point_point+epaisseur_point_2)];
    C:=C,[affichage(cercle(z0+b-i*c),1+point_point+epaisseur_point_2)];
    C:=C,[affichage(cercle(z0-b-i*c),1+point_point+epaisseur_point_2)];
    C:=C,[affichage(cercle(z0+c+i*b),1+point_point+epaisseur_point_2)];
    C:=C,[affichage(cercle(z0-c+i*b),1+point_point+epaisseur_point_2)];
    C:=C,[affichage(cercle(z0+c-i*b),1+point_point+epaisseur_point_2)];
    C:=C,[affichage(cercle(z0-c-i*b),1+point_point+epaisseur_point_2)];

C:=C,[affichage(point(b/a,c/a),1+point_point+epaisseur_point_2)];
 C:=C,[affichage(point(-b/a,c/a),1+point_point+epaisseur_point_2)];
 C:=C,[affichage(point(b/a,-c/a),1+point_point+epaisseur_point_2)];
 C:=C,[affichage(point(-b/a,-c/a),1+point_point+epaisseur_point_2)];
 C:=C,[affichage(point(c/a,b/a),1+point_point+epaisseur_point_2)];
 C:=C,[affichage(point(-c/a,b/a),1+point_point+epaisseur_point_2)];
 C:=C,[affichage(point(c/a,-b/a),1+point_point+epaisseur_point_2)];
 C:=C,[affichage(point(-c/a,-b/a),1+point_point+epaisseur_point_2)];
