Warum sind x^2 + y^2 = z^2 (natürliche Zahlen) nie alles Primzahlen?
-
Ich kam zufällig auf diese Ecke von der Sicht der Primzahlen:
Mit folgendem Programm ist mir etwas aufgefallen:#include <cstdint> #include <limits> #include <iostream> #include <cmath> using namespace std; void wait() { cout << "Press any key" << endl; cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); cin.get(); } bool IsPrime(uint64_t number) { if (number<2) return false; if (number == 2) return true; if (number % 2 == 0) return false; for (uint64_t i = 3; i*i <= number; i += 2) { if (number%i == 0) return false; } return true; } int main() { const uint64_t start = 1, limit = 1000000; uint64_t a, b; for (a = start; a <= limit; ++a) { for (b = a; b <= limit; ++b) { double z = sqrt(a*a + b*b); if ((z == (uint64_t)z) && IsPrime(a) && IsPrime(b) && IsPrime((uint64_t)z) ) { cout << "a = " << a << " b = " << b << " z = " << z << endl; wait(); } } } wait(); }
-
Warum sind x^2 + y^2 = z^2 (alles natürliche Zahlen) nie alles Primzahlen?
-
Selbst für nur x und y findet man keine quadratischen Primzahlenpaare.
if ((z == (uint64_t)z) && IsPrime(a) && IsPrime(b)/* && IsPrime((uint64_t)z)*/ )
- Haben die z, die Primzahlen sind und obige Forderung erfüllen, eine besondere Bedeutung, z.B. bei den Primzahlen?
if ((z == (uint64_t)z) && /*IsPrime(a) && IsPrime(b) &&*/ IsPrime((uint64_t)z) )
-
-
- Warum sind x^2 + y^2 = z^2 (alles natürliche Zahlen) nie alles Primzahlen?
Aus Paritätsgründen müsste dann entweder x=2 oder y=2, und Quadratzahlen, die sich um 4 unterscheiden, gibt es halt nicht viele.
-
Ja, klingt überzeugend.
Bleibt noch 3)
-
Erhard Henkes schrieb:
Ja, klingt überzeugend.
Bleibt noch 3)
Spontan würde ich sagen, man kann das mit quadratischen Resten lösen. Das hier hilft vielleicht https://de.wikipedia.org/wiki/Legendre-Symbol
Ne es gibt tatsächlich auch eine Tripel, in denen nur die ersten beiden prim sind.
Denn alle primitiven Tripel haben ein ungerade letze Zahl. (englishe wikipediaseite Pythagoras Tripel)
-