1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| #include <gmp.h>
int CalculerEtTesterDiagonaleFace(mpz_t nb1, mpz_t nb2);
int main(void)
{
mpz_t A;
mpz_t B;
mpz_t C;
const unsigned long long MAX = 2000;
mpz_init(A);
mpz_init(B);
mpz_init(C);
mpz_set_si(A, 2);
while(mpz_cmp_ui(A, MAX) < 0) {
mpz_set(B, A);
while(mpz_cmp_ui(B, MAX) < 0) {
// Si ?(A² + B²) est un entier, autrement dit si la diagonale est un entier
if(CalculerEtTesterDiagonaleFace(A, B)) {
mpz_set(C, B);
while(mpz_cmp_ui(C, MAX) < 0) {
if(CalculerEtTesterDiagonaleFace(B, C ) &&
CalculerEtTesterDiagonaleFace(C, A)) {
gmp_printf("%Zd - %Zd - %Zd n", A, B, C);
}
mpz_add_ui(C, C, 1);
}
}
mpz_add_ui(B, B, 1);
}
mpz_add_ui(A, A, 1);
}
return 0;
}
int CalculerEtTesterDiagonaleFace(mpz_t nb1, mpz_t nb2)
{
mpz_t puiss1;
mpz_t puiss2;
mpz_t res;
mpz_init(puiss1);
mpz_init(puiss2);
mpz_init(res);
mpz_pow_ui(puiss1, nb1, 2);
mpz_pow_ui(puiss2, nb2, 2);
mpz_add(res, puiss1, puiss2);
int booleen = mpz_perfect_square_p(res);
mpz_clear(puiss1);
mpz_clear(puiss2);
mpz_clear(res);
return booleen;
} |
Partager