/*
Sketch: p_Tripel
Datum: 14.04.2024
Zweck: Erzeugen von teilerfremden pythagoreischen Tripeln
Autor: MIWIS
Beweis und Herleitung der verwendeten Formel:
Wir schreiben eine quadratische Gleichung folgendermassen:
(x-y)^2 + z^2 = (x+y)^2
durch Ausmultiplizieren erhalten wir
(x^2 - 2xy + y^2) + z^2 = (x^2 + 2xy + y^2)
durch Umformen erhalten wir
z^2 = 4*x*y
damit z^2 erfüllt ist, ersetzen wir x durch a^2 und y durch b^2
und erhalten die Formel
(a^2 - b^2)^2 + 4 * a^2 * b^2 = (a^2 + b^2)^2
q.e.d
*/
unsigned long a;
unsigned long b;
unsigned long stop = 8; //beenden, wenn a = stop
void setup() {
Serial.begin(115200);
Serial.println("***Programm startet***");
Serial.println();
Serial.print("Wir erzeugen teilerfremde pythagoreische Tripel und ");
Serial.println("verwenden hierfür die Formel:");
Serial.println("(a*a-b*b)^2 + (2*a*b)^2 = (a*a+b*b)^2 ");
Serial.println();
for (a = 2; a <= stop; a++) {
for (b = 1; b < a; b++) {
if (teilerfremd(a * a - b * b, a * a + b * b)) {
Serial.print(" a=");
Serial.print(a);
Serial.print(" b=");
Serial.print(b);
Serial.print(" => ");
Serial.print(a * a - b * b);
Serial.print("^2 + ");
Serial.print(2 * a * b);
Serial.print("^2 = ");
Serial.print(a * a + b * b);
Serial.println("^2");
}
}
}
Serial.println();
Serial.println("***Programm beendet***");
}
void loop() {
}
unsigned long teilerfremd(unsigned long a, unsigned long b) {
unsigned long rest;
//Serial.print(a);
//Serial.print(" ");
//Serial.println(b);
//Euklidischer Algorithmus ggT mit Modulo
while (1) {
// a % b bedeutet den Teilerrest von a / b (Modulo)
rest = a % b;
a = b;
b = rest;
//Serial.println(b);
// b=1 => teilerfremd, b=0 => nicht teilerfremd (0=>falsch)
if (b < 2) {
return (b);
}
}
}