Trouver tous les entiers premiers entre eux vérifiant pourRenée De Graeve2020 |
Avant-propos
On se propose ici de chercher les triplets pythagoriciens c’est à dire les
entiers premiers entre eux vérifiant pour .
Dans un premier temps, on va utiliser l’arithmétique pour connaître la
parité ou la non parité de . Cela nous permettra de trouver
l’expression de en fonction de deux entiers et 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 et de rayon 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
Dans cette section, on cherche les entiers premiers entre eux
vérifiant pour .
Puisque et sont interchangeables on ne donnera qu’un triplet et
on supposera que sont des entiers non nuls (on ne met pas les
solutions évidentes ).
Si , que peut-on en conclure sur la parité de ?
Question1
peuvent-ils être des entiers pairs ?
Si sont des entiers pairs on a :
Réponse1
Non, ne peuvent pas être des entiers pairs puisque par hypothèse
gcd
Question2
Si sont des entiers pairs est-ce que peut être un entier impair ?
Si sont des entiers pairs on a :
Réponse2
Si sont des entiers pairs, ne peut pas être un entier impair
puisque :
et pairs entraine que est un multiple de 4 donc que
est pair.
Question3
Si sont des entiers impairs et peut-il être un nombre entier ?
Si sont des entiers impairs on a :
Réponse3
Si sont des entiers impairs, ne peut pas être un nombre entier
puisque : entiers impairs entraine est divisible par 2 mais
n’est pas divisible par 4 donc ne peut pas être un nombre entier.
Question4
Si et ont une parité différente par exemple si est un entier
impair et est un entier pair, peut-il être un entier pair ?
On a :
Réponse4
Si est un entier impair et est un entier pair alors
donc , donc si est un entier
alors est un entier impair.
ConclusionI
Si () sont des entiers premiers entre eux vérifiant ,
et ne peuvent pas être tous les deux pairs, ni tous les deux impairs
donc et ont une parité différente et sera un entier impair.
Puisque et sont interchangeables, on peut supposer dans ce qui suit que
est un entier impair, est un entier pair et est un entier impair.
2 Encore des questions lorque et sont impairs
On suppose que , avec . On pose .
Question5
Montrer que avec et donner l’expression de
et en fonction de et .
On tape :
On définit
Calculer et et en déduire les valeurs de et en
fonction de et :
Réponse5
On a donc :
et et
Question6
On suppose que vérifient avec et impairs et pair et premiers entre eux.
On a définit
Montrer que si gcd alors .
Réponse6
On a donc: , et .
Le pgcd de et divise , donc divise
donc divise . Puisque sont premiers entre
eux, cela entraine .
Donc et sont premiers entre eux.
Question7
On suppose que vérifient avec et impairs et que
vérifie où et sont des entiers premiers entre
eux.
On pose et .
Montrer que et sont des entiers.
En déduire, en fonction de et , la valeur des entiers
vérifiant .
Réponse7
On a .
Dans la décomposition en facteurs premiers de les diviseurs
premiers ont une puissance paire et chaque diviseur premier
divise soit , soit mais ne divise pas et .
Donc et sont des carrés parfaits.
Donc il existe deux entiers et premiers entre eux et vérifiant
et et on a :
Question8
Soient deux entiers et . Montrer que et abs ont la
même parité.
En déduire que et ont des parités différentes.
Réponse8
On pose , on a donc ce qui entraine que et
abs=abs sont de même parité.
Donc et ont des parités différentes.
Donc et ont des parités différentes.
ConclusionII
et ont des parités différentes.
On peut supposer que est un entier impair et est un entier pair à
condition de définir par :
b:=abs(p^
2-q^
2) pour que 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 qui vérifient :
, et gcd(a,b,c)=1.
Puisque avec impair et pair; varie, par pas de 2,
de 1 jusque et varie, par pas de 2, de 2 jusque .
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 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 ).
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 vérifiant .
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
vérifiant
.
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 sur les cercles de
centre et de rayon un nombre entier .
Soit un cercle de centre et de rayon et un point (resp ) de
coordonnées (resp ) appartenant à .
Donc vérifient :
avec et
cela signifie que est un triplet pythagoricien.
On écrit un programme qui trace les cercles qui contiennent des points à
coordonnèes dans avec ces points en rouge.
On tape le programme Cercletripletpyz0(z0,N) pour avoir les cercles de
centre et de rayon et sur ces cercles
les points et à coordonnées entières et leurs symétriques
par rapport à , et , lorsque 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 et de rayon avec, sur
ces cercles les points et à coordonnées entières et leurs
symétriques par rapport à , et , lorsque
sont des entiers non premiers entre eux.
On ne dessine pas les cercles de centre et de rayon lorsque est
très grand par exemple .
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 sur le cercle de
centre et de rayon .
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
(pour entiers vérifiant et ) lorsque sont
des fractions irréductibles.
On a donc avec premiers entre eux.
On paramètre le cercle unité, pour cela , on pose : et
.
On a donc et ,
,
et
Donc il existe tel que :
et .
Montrons que est un rationnel.
est solution de donc
Puisque on a (puisque sont les
côtés d’un triangle on a ).
On pose : avec et premiers ente eux et .
On cherche entiers premiers entre eux vérifiant :
et donc
donc
donc .
Valeur de en fonction de et
Puisque on a .
et sont premiers entre eux donc divise i.e.
il existe tel que on a alors :
,
Pour que soient des entiers il faut et il suffit que divise
donc doit diviser .
et sont premiers entre eux donc et sont premiers entre eux
donc ou .
Si on a :
Dans ce cas est pair et est impair mais on considère que le triplet
par exemple est le même que le triplet (cela donnera bien
sûr 2 points à coordonnées rationnelles sur le quart de cercle de centre
et de rayon 1).
Si puisque divise cela entaine que et sont impairs :
posons et , on a :
on a alors :
, et .
Lorsque c’est qui est pair et est impair donc la solution
est égal à deux fois la solution lorsque
avec .
Remarque
Si la fraction est irréductible, la fraction est
aussi irréductible, en effet :
donc
et
si divise et alors divise et donc :
donc la fraction est irréductible.
Puisque et cette solution a été trouvée lorque .
On remarquera que :
- si et si gcd(p,q)=1 le point de coordonnées se trouve sur le cercle unité avec un angle au centre compris entre 0 et ,
- si et si gcd(p,q)=2 le point de coordonnées se trouve sur le cercle unité avec un angle au centre compris entre et ,
- si et si gcd(p,q)=1 le point de coordonnées se trouve sur le cercle unité avec un angle au centre compris entre et ,
- si et si gcd(p,q)=2 le point de
coordonnées se trouve sur
le cercle unité avec un angle au centre compris entre 0 et .
Exemples :
on trouve , , ce qui
donne le point de coordonnées
on trouve , , ce qui
donne le point de coordonnées
on trouve , , ce qui
donne le point de coordonnées
on trouve , ce qui
donne le point de coordonnées
on trouve , , ce qui
donne le point de coordonnées
on trouve , ce qui
donne le point de coordonnées
On écrit le programme tripletpythag(N) qui renvoie la liste des triplets
pythagoriciens , () pour et triée selon les
croissants.
Voici le programme qui utilise les points ayant des coordonnées rationnelles
sur le cercle unité et qui renvoie la liste des triplets
pytagoriciens lorsque .
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 et avec et gcd.
Voici le programme qui affiche les points à coordonnées rationnelles et
sur le quart de cercle unité lorsque , gcd
et .
On doit éliminer les cas où ( et ) sont impairs donc on
on ne prend en compte que lorsque ( ou ) sont pairs.
On a donc :
, et ( ou ) 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 et avec et gcd.
Voici le programme qui affiche les points à coordonnées rationnelles avec
leurs symétriques par rapport à , et
sur le cercle unité lorsque , pgcd()=1 et
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 à coordonnées entières sur les cercles de centre 0 et de rayon lorsque gcd()=1
On pose et avec et gcd.
Voici le programme qui affiche les points à coordonnées entières ,
avec leurs symétriques par rapport à , et sur les
cercles de centre et de rayon lorsque ,
gcd et .
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 lorsque gcd 1
Les points à coordonnées entières sur les cercles de centre 0 et de
rayon lorsque sont non premiers entre eux et non nuls .
On pose et avec .
Voici le programme qui affiche tous les points à coordonnées entières
, avec leurs symétriques par rapport à , et sur les cercles de centre et de rayon lorsque .
Lorsqu’on a obtenu un triplet où gcd, on en
profite pour en déduire les triplets tantque .
On ne dessine pas les cercles de centre et de rayon lorsque est
très grand par exemple .
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
vérifiant gcd, puis on en déduit les triplets
tantque .
On ne dessine pas les cercles de centre et de rayon lorsque est
très grand par exemple .
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