Problem Summary

We seek primitive positive integer triples \((x,y,z)\) satisfying

$$\frac{1}{x^2}+\frac{1}{y^2}=\frac{13}{z^2},\qquad \gcd(x,y,z)=1,$$

together with the bound \(x,y,z\le N\). For every admissible triple we add \(x+y+z\), so the target quantity is

$$S(N)=\sum_{\substack{(x,y,z)\text{ primitive}\\ \frac{1}{x^2}+\frac{1}{y^2}=\frac{13}{z^2}\\ x,y,z\le N}} (x+y+z).$$

A brute-force search over all triples up to \(N=10^{16}\) is impossible, so the solution reorganizes the equation until the search space is generated by primitive Pythagorean parameters and a sharp bound on one auxiliary variable.

Mathematical Approach

Step 1: Remove the common factor of \(x\) and \(y\)

Write

$$x=g\,a,\qquad y=g\,b,\qquad \gcd(a,b)=1.$$

Substituting into the reciprocal equation gives

$$z^2(a^2+b^2)=13g^2a^2b^2.$$

Because \(\gcd(a,a^2+b^2)=\gcd(a,b^2)=1\), the factor \(a^2\) must divide \(z^2\), so \(a\mid z\). The same argument shows \(b\mid z\). Since \(\gcd(a,b)=1\), we can write

$$z=abk$$

for some positive integer \(k\). After substitution,

$$k^2(a^2+b^2)=13g^2.$$

The primitive condition \(\gcd(x,y,z)=1\) implies \(\gcd(g,z)=1\), hence \(\gcd(g,k)=1\). Therefore \(k^2\) divides \(13\), so the only possibility is

$$k=1.$$

Thus every primitive solution has the shape

$$x=q\,r,\qquad y=p\,r,\qquad z=pq,$$

where

$$p^2+q^2=13r^2,\qquad \gcd(p,q)=1.$$

The original reciprocal equation has been reduced to finding primitive representations of \(13r^2\) as a sum of two squares.

Step 2: Parametrize \(r^2\) by primitive Pythagorean triples

Any primitive solution of

$$u^2+v^2=r^2$$

is given by Euclid's parametrization

$$u=m^2-n^2,\qquad v=2mn,\qquad r=m^2+n^2,$$

with

$$m>n\ge 0,\qquad m-n\text{ odd},\qquad \gcd(m,n)=1.$$

Allowing \(n=0\) keeps the degenerate base case \(u=1\), \(v=0\), \(r=1\); for larger \(m\) the coprimality test automatically rejects \(n=0\). So the implementation can handle the smallest primitive solution without special-case code.

Step 3: Compose with \(13=3^2+2^2\)

The identity

$$ (A^2+B^2)(C^2+D^2)=(AC-BD)^2+(AD+BC)^2=(AC+BD)^2+(AD-BC)^2 $$

turns a representation of \(r^2\) into a representation of \(13r^2\). Using \(13=3^2+2^2\) and the pair \((u,v)\) from Step 2 gives two candidate branches:

$$p=\left|3u-2v\right|,\qquad q=\left|2u+3v\right|,$$

or

$$p=\left|3u+2v\right|,\qquad q=\left|2u-3v\right|.$$

In both cases,

$$p^2+q^2=(3^2+2^2)(u^2+v^2)=13r^2.$$

These two branches are the real-coordinate form of multiplying by \(3+2i\) or \(3-2i\) in the Gaussian integers. That viewpoint also explains why the parametrization is complete for primitive solutions.

Step 4: Return to \((x,y,z)\) and enforce primitiveness

Once a pair \((p,q)\) with \(p^2+q^2=13r^2\) is known, define

$$x=q\,r,\qquad y=p\,r,\qquad z=pq.$$

Then

$$ \frac{1}{x^2}+\frac{1}{y^2} =\frac{1}{q^2r^2}+\frac{1}{p^2r^2} =\frac{p^2+q^2}{p^2q^2r^2} =\frac{13r^2}{p^2q^2r^2} =\frac{13}{z^2}. $$

The implementations keep only positive pairs and require \(\gcd(p,q)=1\). That already forces the final triple to be primitive. Indeed, if a prime divided both \(r\) and \(p\), then from \(q^2=13r^2-p^2\) it would also divide \(q\), contradicting \(\gcd(p,q)=1\). So \(\gcd(r,p)=\gcd(r,q)=1\), hence \(\gcd(x,y,z)=1\).

To avoid counting the same solution twice with \(x\) and \(y\) swapped, the implementation orders the pair so that \(p\ge q\), which implies \(y\ge x\). It also discards the rare case where the two branches produce the same pair.

Step 5: Derive the search bound

The formulas above give

$$x^2+y^2=r^2(p^2+q^2)=13r^4.$$

If \(x\le N\) and \(y\le N\), then

$$x^2+y^2\le 2N^2,$$

so every valid triple must satisfy

$$13r^4\le 2N^2.$$

This yields the sharp search limit

$$r\le r_{\max}=\left\lfloor\left(\frac{2N^2}{13}\right)^{1/4}\right\rfloor.$$

Since \(r=m^2+n^2\), the outer parameter only needs to run up to \(\lfloor\sqrt{r_{\max}}\rfloor\).

Worked Example: \(N=100\)

For \(N=100\), the bound is

$$13r^4\le 2\cdot 100^2=20000,$$

so \(r_{\max}=6\).

The pair \((m,n)=(1,0)\) gives

$$u=1,\qquad v=0,\qquad r=1.$$

Both branches collapse to the same pair \((p,q)=(3,2)\). Therefore

$$x=2,\qquad y=3,\qquad z=6,$$

and the contribution is \(2+3+6=11\).

The pair \((m,n)=(2,1)\) gives

$$u=3,\qquad v=4,\qquad r=5.$$

The two branches produce \((p,q)=(18,1)\) and \((17,6)\). They map to

$$ (x,y,z)=(5,90,18)\quad \text{and}\quad (30,85,102). $$

Only the first triple satisfies \(x,y,z\le 100\), so its contribution is \(5+90+18=113\).

No other primitive parameter pair has \(r\le 6\). Hence

$$S(100)=11+113=124,$$

which matches the implementation's checkpoint.

How the Code Works

The C++, Python, and Java implementations follow the same pipeline. First they compute the largest admissible \(r\) by integer binary search on the inequality \(13r^4\le 2N^2\). That keeps the search exact and avoids floating-point edge cases at the upper boundary.

Next they enumerate all primitive Euclid parameters \((m,n)\) with the parity and coprimality conditions from Step 2. For each such pair, they form the two linear transforms from Step 3, reorder the resulting values so the larger one comes first, discard zero values, suppress a duplicated second branch when both branches coincide, and keep only coprime pairs.

Each surviving pair is converted into \((x,y,z)=(qr,pr,pq)\). If all three coordinates are at most \(N\), the implementation adds \(x+y+z\) to the running total. The arithmetic is done with sufficiently wide integer types so that intermediate products remain exact.

Complexity Analysis

Let

$$R=\left\lfloor\left(\frac{2N^2}{13}\right)^{1/4}\right\rfloor.$$

The parameter search visits primitive pairs \((m,n)\) with \(m^2+n^2\le R\), so the number of tested pairs is \(O(R)\). Because \(R=\Theta(\sqrt{N})\), the total running time is \(O(\sqrt{N})\) with only constant extra memory beyond the integer arithmetic used for safe products and accumulation.

Footnotes and References

  1. Problem page: Project Euler 748
  2. Pythagorean parametrization: Wikipedia - Pythagorean triple
  3. Composition of sums of two squares: Wikipedia - Brahmagupta-Fibonacci identity
  4. Gaussian integer viewpoint: Wikipedia - Gaussian integer
  5. Background on Diophantine equations: Wikipedia - Diophantine equation

Problemzusammenfassung

Gesucht sind primitive positive ganzzahlige Tripel \((x,y,z)\) mit

$$\frac{1}{x^2}+\frac{1}{y^2}=\frac{13}{z^2},\qquad \gcd(x,y,z)=1,$$

sowie der Schranke \(x,y,z\le N\). Für jedes zulässige Tripel wird \(x+y+z\) addiert; die Zielgröße ist also

$$S(N)=\sum_{\substack{(x,y,z)\text{ primitiv}\\ \frac{1}{x^2}+\frac{1}{y^2}=\frac{13}{z^2}\\ x,y,z\le N}} (x+y+z).$$

Eine direkte Suche bis \(N=10^{16}\) ist völlig unpraktikabel. Deshalb formt die Lösung die Gleichung so um, dass alle Kandidaten aus primitiven pythagoreischen Parametern und einer scharfen Schranke für eine Hilfsvariable erzeugt werden.

Mathematischer Ansatz

Schritt 1: Den gemeinsamen Faktor von \(x\) und \(y\) abspalten

Schreibe

$$x=g\,a,\qquad y=g\,b,\qquad \gcd(a,b)=1.$$

Einsetzen in die Kehrwertgleichung liefert

$$z^2(a^2+b^2)=13g^2a^2b^2.$$

Weil \(\gcd(a,a^2+b^2)=\gcd(a,b^2)=1\), muss \(a^2\) den Ausdruck \(z^2\) teilen; also gilt \(a\mid z\). Genauso folgt \(b\mid z\). Wegen \(\gcd(a,b)=1\) können wir

$$z=abk$$

schreiben. Dann wird die Gleichung zu

$$k^2(a^2+b^2)=13g^2.$$

Aus der Primitivität \(\gcd(x,y,z)=1\) folgt \(\gcd(g,z)=1\) und damit insbesondere \(\gcd(g,k)=1\). Also muss \(k^2\) ein Teiler von \(13\) sein, was nur für

$$k=1$$

möglich ist. Jede primitive Lösung hat somit die Form

$$x=q\,r,\qquad y=p\,r,\qquad z=pq,$$

wobei

$$p^2+q^2=13r^2,\qquad \gcd(p,q)=1.$$

Das ursprüngliche Problem ist damit auf primitive Darstellungen von \(13r^2\) als Summe zweier Quadrate reduziert.

Schritt 2: \(r^2\) durch primitive pythagoreische Tripel parametrisieren

Jede primitive Lösung von

$$u^2+v^2=r^2$$

wird durch Euklids Parametrisierung beschrieben:

$$u=m^2-n^2,\qquad v=2mn,\qquad r=m^2+n^2,$$

mit

$$m>n\ge 0,\qquad m-n\text{ ungerade},\qquad \gcd(m,n)=1.$$

Die Zulassung von \(n=0\) deckt den Grundfall \(u=1\), \(v=0\), \(r=1\) ab; für größere \(m\) verwirft der Teilerfremdheitstest automatisch alle übrigen Fälle mit \(n=0\).

Schritt 3: Mit \(13=3^2+2^2\) komponieren

Die Identität

$$ (A^2+B^2)(C^2+D^2)=(AC-BD)^2+(AD+BC)^2=(AC+BD)^2+(AD-BC)^2 $$

macht aus einer Darstellung von \(r^2\) sofort eine Darstellung von \(13r^2\). Mit \(13=3^2+2^2\) und dem Paar \((u,v)\) aus Schritt 2 entstehen zwei Kandidatenzweige:

$$p=\left|3u-2v\right|,\qquad q=\left|2u+3v\right|,$$

oder

$$p=\left|3u+2v\right|,\qquad q=\left|2u-3v\right|.$$

In beiden Fällen gilt

$$p^2+q^2=(3^2+2^2)(u^2+v^2)=13r^2.$$

Diese beiden Zweige entsprechen im Gaußschen Zahlenring der Multiplikation mit \(3+2i\) beziehungsweise \(3-2i\). Dadurch wird zugleich klar, warum die Parametrisierung für primitive Lösungen vollständig ist.

Schritt 4: Zu \((x,y,z)\) zurückkehren und Primitivität sichern

Ist ein Paar \((p,q)\) mit \(p^2+q^2=13r^2\) gefunden, setzen wir

$$x=q\,r,\qquad y=p\,r,\qquad z=pq.$$

Dann folgt sofort

$$ \frac{1}{x^2}+\frac{1}{y^2} =\frac{1}{q^2r^2}+\frac{1}{p^2r^2} =\frac{p^2+q^2}{p^2q^2r^2} =\frac{13r^2}{p^2q^2r^2} =\frac{13}{z^2}. $$

Die Implementierungen behalten nur positive Paare mit \(\gcd(p,q)=1\). Das erzwingt bereits die Primitivität des Endtripels: Teilt eine Primzahl sowohl \(r\) als auch \(p\), dann teilt sie wegen \(q^2=13r^2-p^2\) auch \(q\), im Widerspruch zu \(\gcd(p,q)=1\). Also sind \(r\) und \(p\) sowie \(r\) und \(q\) teilerfremd, daher ist \(\gcd(x,y,z)=1\).

Damit \((x,y,z)\) und \((y,x,z)\) nicht doppelt gezählt werden, wird das Paar so geordnet, dass \(p\ge q\) gilt. Außerdem wird ein seltener doppelter Zweig verworfen, wenn beide Formeln dasselbe Paar erzeugen.

Schritt 5: Die Suchschranke herleiten

Aus den Formeln folgt

$$x^2+y^2=r^2(p^2+q^2)=13r^4.$$

Wenn \(x\le N\) und \(y\le N\), dann ist

$$x^2+y^2\le 2N^2,$$

also muss jede gültige Lösung die Bedingung

$$13r^4\le 2N^2$$

erfüllen. Damit erhält man die exakte Suchgrenze

$$r\le r_{\max}=\left\lfloor\left(\frac{2N^2}{13}\right)^{1/4}\right\rfloor.$$

Da \(r=m^2+n^2\) ist, genügt es, den äußeren Parameter bis \(\lfloor\sqrt{r_{\max}}\rfloor\) laufen zu lassen.

Durchgerechnetes Beispiel: \(N=100\)

Für \(N=100\) lautet die Schranke

$$13r^4\le 2\cdot 100^2=20000,$$

also ist \(r_{\max}=6\).

Das Paar \((m,n)=(1,0)\) liefert

$$u=1,\qquad v=0,\qquad r=1.$$

Beide Zweige fallen auf dasselbe Paar \((p,q)=(3,2)\) zusammen. Daraus folgt

$$x=2,\qquad y=3,\qquad z=6,$$

mit Beitrag \(2+3+6=11\).

Das Paar \((m,n)=(2,1)\) ergibt

$$u=3,\qquad v=4,\qquad r=5.$$

Die beiden Zweige erzeugen \((p,q)=(18,1)\) und \((17,6)\). Diese führen zu

$$ (x,y,z)=(5,90,18)\quad \text{und}\quad (30,85,102). $$

Nur das erste Tripel erfüllt \(x,y,z\le 100\), also beträgt sein Beitrag \(5+90+18=113\).

Weitere primitive Parameterpaare mit \(r\le 6\) gibt es nicht. Daher

$$S(100)=11+113=124,$$

genau wie im Prüfwert der Implementierung.

Wie der Code arbeitet

Die C++-, Python- und Java-Implementierungen verwenden dieselbe Ablaufstruktur. Zuerst bestimmen sie per ganzzahliger Binärsuche das größte zulässige \(r\), das noch \(13r^4\le 2N^2\) erfüllt. So bleibt die obere Grenze exakt und es entstehen keine Rundungsprobleme an der Kante.

Danach werden alle primitiven Euklid-Parameter \((m,n)\) mit den Bedingungen aus Schritt 2 durchlaufen. Für jedes Paar werden die beiden linearen Transformationen aus Schritt 3 gebildet, in eine feste Reihenfolge gebracht, bei Null verworfen, im Fall identischer Zweige entdoppelt und nur dann behalten, wenn das resultierende Paar teilerfremd ist.

Jedes verbleibende Paar wird in \((x,y,z)=(qr,pr,pq)\) umgerechnet. Falls alle drei Werte höchstens \(N\) sind, addiert die Implementierung \(x+y+z\) zur Gesamtsumme. Für die Produkte und die Akkumulation werden hinreichend breite Ganzzahltypen benutzt, damit alle Zwischenwerte exakt bleiben.

Komplexitätsanalyse

Setze

$$R=\left\lfloor\left(\frac{2N^2}{13}\right)^{1/4}\right\rfloor.$$

Durchsucht werden primitive Paare \((m,n)\) mit \(m^2+n^2\le R\); deren Anzahl ist \(O(R)\). Da \(R=\Theta(\sqrt{N})\) gilt, beträgt die Gesamtlaufzeit \(O(\sqrt{N})\). Der zusätzliche Speicherbedarf ist abgesehen von den für sichere Ganzzahlarithmetik benötigten Werten konstant.

Fußnoten und Quellen

  1. Problemseite: Project Euler 748
  2. Pythagoreische Parametrisierung: Wikipedia - Pythagoreisches Tripel
  3. Komposition von Quadratsummen: Wikipedia - Brahmagupta-Fibonacci-Identität
  4. Gaußsche ganze Zahlen: Wikipedia - Gaußsche Zahl
  5. Diophantische Gleichungen: Wikipedia - Diophantische Gleichung

Problem Özeti

Aranan şey,

$$\frac{1}{x^2}+\frac{1}{y^2}=\frac{13}{z^2},\qquad \gcd(x,y,z)=1$$

koşullarını sağlayan ilkel pozitif tamsayı üçlüleridir. Ayrıca \(x\le N\), \(y\le N\) ve \(z\le N\) olmalıdır. Her uygun üçlü için \(x+y+z\) toplandığından hedef büyüklük

$$S(N)=\sum_{\substack{(x,y,z)\text{ ilkel}\\ \frac{1}{x^2}+\frac{1}{y^2}=\frac{13}{z^2}\\ x,y,z\le N}} (x+y+z)$$

şeklindedir. \(N=10^{16}\) seviyesinde doğrudan tarama yapılamayacağı için çözüm, denklemi iki kare toplamı parametrizasyonuna indirger.

Matematiksel Yaklaşım

Adım 1: \(x\) ve \(y\)'nin ortak çarpanını ayır

Şöyle yazalım:

$$x=g\,a,\qquad y=g\,b,\qquad \gcd(a,b)=1.$$

Bunu denkleme koyunca

$$z^2(a^2+b^2)=13g^2a^2b^2$$

elde edilir. \(\gcd(a,a^2+b^2)=\gcd(a,b^2)=1\) olduğundan \(a^2\) mutlaka \(z^2\)'yi bölmelidir; dolayısıyla \(a\mid z\). Aynı mantıkla \(b\mid z\) de çıkar. \(\gcd(a,b)=1\) olduğu için

$$z=abk$$

yazabiliriz. Yerine koyarsak

$$k^2(a^2+b^2)=13g^2$$

olur. İlkel olma koşulu \(\gcd(x,y,z)=1\), özellikle \(\gcd(g,z)=1\) anlamına gelir; buradan \(\gcd(g,k)=1\) gelir. O halde \(k^2\), \(13\)'ü bölmelidir ve tek olasılık

$$k=1$$

olur. Böylece her ilkel çözüm şu biçime iner:

$$x=q\,r,\qquad y=p\,r,\qquad z=pq,$$

ve burada

$$p^2+q^2=13r^2,\qquad \gcd(p,q)=1.$$

Yani asıl problem, \(13r^2\)'yi iki kare toplamı olarak ilkel biçimde yazmaktır.

Adım 2: \(r^2\)'yi ilkel Pisagor üçlüleriyle parametrize et

Şimdi

$$u^2+v^2=r^2$$

eşitliğinin her ilkel çözümü, Euclid parametrizasyonuyla

$$u=m^2-n^2,\qquad v=2mn,\qquad r=m^2+n^2$$

şeklinde yazılır. Koşullar

$$m>n\ge 0,\qquad m-n\text{ tek},\qquad \gcd(m,n)=1$$

olmalıdır. \(n=0\) seçeneği, en küçük temel durum olan \(u=1\), \(v=0\), \(r=1\)'i otomatik olarak kapsar; daha büyük \(m\) değerlerinde ise aralarında asal olma filtresi zaten bunları eler.

Adım 3: \(13=3^2+2^2\) ile bileştir

Kullanılan temel özdeşlik

$$ (A^2+B^2)(C^2+D^2)=(AC-BD)^2+(AD+BC)^2=(AC+BD)^2+(AD-BC)^2 $$

özdeşliği, \(r^2\)'nin bir temsilini doğrudan \(13r^2\)'nin temsiline dönüştürür. \(13=3^2+2^2\) ve Adım 2'deki \((u,v)\) kullanılırsa iki aday dal elde edilir:

$$p=\left|3u-2v\right|,\qquad q=\left|2u+3v\right|,$$

veya

$$p=\left|3u+2v\right|,\qquad q=\left|2u-3v\right|.$$

Her iki durumda da

$$p^2+q^2=(3^2+2^2)(u^2+v^2)=13r^2$$

sağlanır. Bu iki formül, Gauss tamsayılarında \(3+2i\) ve \(3-2i\) ile çarpmanın gerçek bileşenlere açılmış halidir; bu bakış aynı zamanda parametrizasyonun neden tam olduğunu açıklar.

Adım 4: \((x,y,z)\)'ye geri dön ve ilkel olma koşulunu koru

\(p^2+q^2=13r^2\) sağlayan bir çift bulunduğunda

$$x=q\,r,\qquad y=p\,r,\qquad z=pq$$

tanımlanır. O zaman

$$ \frac{1}{x^2}+\frac{1}{y^2} =\frac{1}{q^2r^2}+\frac{1}{p^2r^2} =\frac{p^2+q^2}{p^2q^2r^2} =\frac{13r^2}{p^2q^2r^2} =\frac{13}{z^2} $$

olur. Uygulama yalnızca pozitif ve \(\gcd(p,q)=1\) olan çiftleri tutar. Bu zaten son üçlünün ilkel olmasını garanti eder: Bir asal hem \(r\)'yi hem \(p\)'yi bölseydi, \(q^2=13r^2-p^2\) nedeniyle \(q\)'yu da bölerdi; bu da \(\gcd(p,q)=1\) ile çelişirdi.

Ayrıca aynı çözümü \(x\) ve \(y\) yer değiştirmiş halde iki kez saymamak için çift \(p\ge q\) olacak şekilde sıralanır. Nadir durumlarda iki aday dal aynı çifti üretirse ikinci kopya atılır.

Adım 5: Arama üst sınırını çıkar

Yukarıdaki tanımlardan

$$x^2+y^2=r^2(p^2+q^2)=13r^4$$

elde edilir. Eğer \(x\le N\) ve \(y\le N\) ise

$$x^2+y^2\le 2N^2$$

olduğundan her geçerli çözüm için

$$13r^4\le 2N^2$$

zorunludur. Dolayısıyla keskin sınır

$$r\le r_{\max}=\left\lfloor\left(\frac{2N^2}{13}\right)^{1/4}\right\rfloor$$

olur. \(r=m^2+n^2\) olduğu için dış döngüde \(m\) ancak \(\lfloor\sqrt{r_{\max}}\rfloor\) değerine kadar gitmelidir.

Çözümlü Örnek: \(N=100\)

\(N=100\) için sınır

$$13r^4\le 2\cdot 100^2=20000$$

olduğundan \(r_{\max}=6\) bulunur.

\((m,n)=(1,0)\) çifti

$$u=1,\qquad v=0,\qquad r=1$$

verir. İki aday dal aynı \((p,q)=(3,2)\) çiftine düşer. Böylece

$$x=2,\qquad y=3,\qquad z=6$$

ve katkı \(2+3+6=11\) olur.

\((m,n)=(2,1)\) çifti için

$$u=3,\qquad v=4,\qquad r=5$$

elde edilir. Dallar \((p,q)=(18,1)\) ve \((17,6)\) üretir. Bunlar

$$ (x,y,z)=(5,90,18)\quad \text{ve}\quad (30,85,102) $$

üçlülerine gider. Bunlardan sadece ilki \(x,y,z\le 100\) koşulunu sağlar; katkısı \(5+90+18=113\)'tür.

\(r\le 6\) için başka ilkel parametre çifti yoktur. Sonuç olarak

$$S(100)=11+113=124$$

bulunur; bu da uygulamadaki kontrol değeriyle aynıdır.

Kod Nasıl Çalışır

C++, Python ve Java uygulamaları aynı akışı izler. Önce \(13r^4\le 2N^2\) eşitsizliğini tam sayı ikili aramayla çözerek en büyük uygun \(r\) bulunur. Böylece üst sınır kesin olur ve kayan nokta sınır hatalarından kaçınılır.

Ardından Adım 2'deki parity ve aralarında asal olma koşullarını sağlayan tüm Euclid parametreleri \((m,n)\) dolaşılır. Her çift için Adım 3'teki iki lineer dönüşüm hesaplanır, büyük olan başa alınır, sıfır içeren durumlar ve yinelenen ikinci dal atılır, sonra da yalnızca aralarında asal çiftler tutulur.

Kalan her aday \((x,y,z)=(qr,pr,pq)\) biçimine çevrilir. Eğer üç bileşenin hepsi \(N\)'yi aşmıyorsa toplam değere \(x+y+z\) eklenir. Ara çarpımların ve toplamın taşmaması için yeterince geniş tamsayı aritmetiği kullanılır.

Karmaşıklık Analizi

Tanım gereği

$$R=\left\lfloor\left(\frac{2N^2}{13}\right)^{1/4}\right\rfloor$$

olsun. Aranan bölge \(m^2+n^2\le R\) koşulunu sağlayan ilkel çiftlerdir; ziyaret edilen çift sayısı \(O(R)\) mertebesindedir. \(R=\Theta(\sqrt{N})\) olduğundan toplam çalışma süresi \(O(\sqrt{N})\), ek bellek kullanımı ise güvenli tamsayı aritmetiği dışında \(O(1)\)'dir.

Dipnotlar ve Kaynakça

  1. Problem sayfası: Project Euler 748
  2. Pisagor üçlüleri: Vikipedi - Pisagor üçlüsü
  3. İki kare toplamlarının bileşimi: Wikipedia - Brahmagupta-Fibonacci identity
  4. Gauss tamsayıları: Vikipedi - Gauss tamsayısı
  5. Diofant denklemleri: Vikipedi - Diofant denklemi

Resumen del Problema

Buscamos ternas primitivas de enteros positivos \((x,y,z)\) que satisfacen

$$\frac{1}{x^2}+\frac{1}{y^2}=\frac{13}{z^2},\qquad \gcd(x,y,z)=1,$$

con la restricción adicional \(x,y,z\le N\). Para cada terna válida se suma \(x+y+z\), así que la cantidad objetivo es

$$S(N)=\sum_{\substack{(x,y,z)\text{ primitiva}\\ \frac{1}{x^2}+\frac{1}{y^2}=\frac{13}{z^2}\\ x,y,z\le N}} (x+y+z).$$

Recorrer directamente todas las ternas hasta \(N=10^{16}\) es inviable. La solución transforma la ecuación recíproca en una parametrización de suma de dos cuadrados con un límite de búsqueda muy estrecho.

Enfoque Matemático

Paso 1: Separar el factor común de \(x\) y \(y\)

Escribimos

$$x=g\,a,\qquad y=g\,b,\qquad \gcd(a,b)=1.$$

Al sustituir en la ecuación se obtiene

$$z^2(a^2+b^2)=13g^2a^2b^2.$$

Como \(\gcd(a,a^2+b^2)=\gcd(a,b^2)=1\), se deduce que \(a^2\) divide a \(z^2\), luego \(a\mid z\). Lo mismo vale para \(b\). Dado que \(\gcd(a,b)=1\), podemos poner

$$z=abk.$$

Entonces la ecuación pasa a ser

$$k^2(a^2+b^2)=13g^2.$$

La condición de primitividad \(\gcd(x,y,z)=1\) implica \(\gcd(g,z)=1\), así que también \(\gcd(g,k)=1\). Por tanto \(k^2\) debe dividir a \(13\), y la única posibilidad es

$$k=1.$$

Toda solución primitiva queda entonces en la forma

$$x=q\,r,\qquad y=p\,r,\qquad z=pq,$$

con

$$p^2+q^2=13r^2,\qquad \gcd(p,q)=1.$$

El problema original queda reducido a describir representaciones primitivas de \(13r^2\) como suma de dos cuadrados.

Paso 2: Parametrizar \(r^2\) mediante ternas pitagóricas primitivas

Cualquier solución primitiva de

$$u^2+v^2=r^2$$

se escribe con la parametrización de Euclides:

$$u=m^2-n^2,\qquad v=2mn,\qquad r=m^2+n^2,$$

bajo las condiciones

$$m>n\ge 0,\qquad m-n\text{ impar},\qquad \gcd(m,n)=1.$$

Permitir \(n=0\) conserva el caso base degenerado \(u=1\), \(v=0\), \(r=1\); para valores mayores de \(m\), la prueba de coprimalidad elimina automáticamente los demás casos con \(n=0\).

Paso 3: Componer con \(13=3^2+2^2\)

La identidad

$$ (A^2+B^2)(C^2+D^2)=(AC-BD)^2+(AD+BC)^2=(AC+BD)^2+(AD-BC)^2 $$

convierte una representación de \(r^2\) en una representación de \(13r^2\). Usando \(13=3^2+2^2\) y el par \((u,v)\) del paso anterior aparecen dos ramas candidatas:

$$p=\left|3u-2v\right|,\qquad q=\left|2u+3v\right|,$$

o bien

$$p=\left|3u+2v\right|,\qquad q=\left|2u-3v\right|.$$

En ambos casos,

$$p^2+q^2=(3^2+2^2)(u^2+v^2)=13r^2.$$

Estas dos fórmulas son la versión en coordenadas reales de multiplicar por \(3+2i\) o por \(3-2i\) en los enteros gaussianos. Esa interpretación también explica por qué la parametrización cubre todas las soluciones primitivas.

Paso 4: Volver a \((x,y,z)\) y asegurar la primitividad

Una vez conocido un par \((p,q)\) con \(p^2+q^2=13r^2\), definimos

$$x=q\,r,\qquad y=p\,r,\qquad z=pq.$$

Entonces

$$ \frac{1}{x^2}+\frac{1}{y^2} =\frac{1}{q^2r^2}+\frac{1}{p^2r^2} =\frac{p^2+q^2}{p^2q^2r^2} =\frac{13r^2}{p^2q^2r^2} =\frac{13}{z^2}. $$

Las implementaciones solo aceptan pares positivos y con \(\gcd(p,q)=1\). Eso ya obliga a que la terna final sea primitiva: si un primo dividiera a la vez \(r\) y \(p\), entonces de \(q^2=13r^2-p^2\) también dividiría a \(q\), contradiciendo \(\gcd(p,q)=1\).

Para no contar dos veces la misma solución con \(x\) e \(y\) intercambiados, el par se ordena de modo que \(p\ge q\). Si las dos ramas producen exactamente el mismo par, la segunda copia se descarta.

Paso 5: Obtener la cota de búsqueda

De las fórmulas anteriores se deduce

$$x^2+y^2=r^2(p^2+q^2)=13r^4.$$

Si \(x\le N\) y \(y\le N\), entonces

$$x^2+y^2\le 2N^2,$$

y toda solución válida debe cumplir

$$13r^4\le 2N^2.$$

Por tanto, la frontera exacta es

$$r\le r_{\max}=\left\lfloor\left(\frac{2N^2}{13}\right)^{1/4}\right\rfloor.$$

Como \(r=m^2+n^2\), basta con hacer correr el parámetro exterior hasta \(\lfloor\sqrt{r_{\max}}\rfloor\).

Ejemplo trabajado: \(N=100\)

Cuando \(N=100\), la cota es

$$13r^4\le 2\cdot 100^2=20000,$$

de modo que \(r_{\max}=6\).

El par \((m,n)=(1,0)\) produce

$$u=1,\qquad v=0,\qquad r=1.$$

Las dos ramas colapsan en el mismo par \((p,q)=(3,2)\). Entonces

$$x=2,\qquad y=3,\qquad z=6,$$

y la contribución es \(2+3+6=11\).

El par \((m,n)=(2,1)\) produce

$$u=3,\qquad v=4,\qquad r=5.$$

Las dos ramas dan \((p,q)=(18,1)\) y \((17,6)\). Eso lleva a

$$ (x,y,z)=(5,90,18)\quad \text{y}\quad (30,85,102). $$

Solo la primera terna cumple \(x,y,z\le 100\), así que aporta \(5+90+18=113\).

No hay más pares primitivos con \(r\le 6\). Por eso

$$S(100)=11+113=124,$$

exactamente el valor de comprobación usado por la implementación.

Cómo Funciona el Código

Las implementaciones en C++, Python y Java siguen la misma secuencia. Primero calculan el mayor \(r\) admisible mediante una búsqueda binaria entera sobre la desigualdad \(13r^4\le 2N^2\). Así el límite superior queda exacto y no depende de redondeos de punto flotante.

Después enumeran todos los pares primitivos \((m,n)\) de Euclides que cumplen las condiciones de paridad y coprimalidad del Paso 2. Para cada par forman las dos transformaciones lineales del Paso 3, ordenan el resultado para que el mayor valor quede primero, descartan ceros, eliminan una segunda rama duplicada cuando coincide con la primera y conservan solo los pares coprimos.

Cada par superviviente se transforma en \((x,y,z)=(qr,pr,pq)\). Si las tres coordenadas no superan \(N\), la implementación suma \(x+y+z\) al acumulado. Las multiplicaciones intermedias y la acumulación se hacen con tipos enteros suficientemente amplios para mantener la exactitud.

Complejidad

Sea

$$R=\left\lfloor\left(\frac{2N^2}{13}\right)^{1/4}\right\rfloor.$$

La búsqueda recorre pares primitivos \((m,n)\) con \(m^2+n^2\le R\), por lo que el número de candidatos visitados es \(O(R)\). Como \(R=\Theta(\sqrt{N})\), el tiempo total es \(O(\sqrt{N})\). El uso de memoria adicional es \(O(1)\), aparte de la aritmética entera necesaria para que los productos sean seguros.

Notas y Referencias

  1. Página del problema: Project Euler 748
  2. Parametrización pitagórica: Wikipedia - Terna pitagórica
  3. Composición de sumas de dos cuadrados: Wikipedia - Brahmagupta-Fibonacci identity
  4. Enteros gaussianos: Wikipedia - Entero gaussiano
  5. Ecuaciones diofánticas: Wikipedia - Ecuación diofántica

问题概述

题目要求统计所有本原正整数三元组 \((x,y,z)\),满足

$$\frac{1}{x^2}+\frac{1}{y^2}=\frac{13}{z^2},\qquad \gcd(x,y,z)=1,$$

并且 \(x\le N\)、\(y\le N\)、\(z\le N\)。对每个合法三元组都要累加 \(x+y+z\),因此目标函数是

$$S(N)=\sum_{\substack{(x,y,z)\text{ 为本原解}\\ \frac{1}{x^2}+\frac{1}{y^2}=\frac{13}{z^2}\\ x,y,z\le N}} (x+y+z).$$

如果直接在 \([1,N]\) 内枚举三元组,那么在 \(N=10^{16}\) 时完全不可行。实现采用的思路是先把倒数平方方程化成一个“平方和”问题,再用本原勾股参数生成全部候选,并用一个非常紧的上界裁掉绝大多数搜索空间。

数学方法

步骤 1:先把 \(x\) 和 \(y\) 的公共因子提出去

$$x=g\,a,\qquad y=g\,b,\qquad \gcd(a,b)=1.$$

代回原式可得

$$z^2(a^2+b^2)=13g^2a^2b^2.$$

由于 \(\gcd(a,a^2+b^2)=\gcd(a,b^2)=1\),所以 \(a^2\) 必须整除 \(z^2\),于是 \(a\mid z\)。同理也有 \(b\mid z\)。又因为 \(a\) 与 \(b\) 互素,所以可以写成

$$z=abk.$$

再代回去,就得到

$$k^2(a^2+b^2)=13g^2.$$

本原条件 \(\gcd(x,y,z)=1\) 意味着 \(\gcd(g,z)=1\),因此特别有 \(\gcd(g,k)=1\)。于是 \(k^2\) 必须是 \(13\) 的平方因子,只可能是

$$k=1.$$

所以每个本原解都可以改写为

$$x=q\,r,\qquad y=p\,r,\qquad z=pq,$$

其中

$$p^2+q^2=13r^2,\qquad \gcd(p,q)=1.$$

这一步非常关键,因为它说明原问题等价于寻找 \(13r^2\) 的本原平方和表示。

步骤 2:把 \(r^2\) 写成本原勾股三元组

所有本原解

$$u^2+v^2=r^2$$

都可以由 Euclid 参数化给出:

$$u=m^2-n^2,\qquad v=2mn,\qquad r=m^2+n^2,$$

条件是

$$m>n\ge 0,\qquad m-n\text{ 为奇数},\qquad \gcd(m,n)=1.$$

实现里允许 \(n=0\),这样最小的退化情形 \(u=1\)、\(v=0\)、\(r=1\) 会自然出现;而当 \(m>1\) 时,互素筛选会自动排掉其余 \(n=0\) 的情况。因此不需要额外写一个“最小解特判”。

步骤 3:利用 \(13=3^2+2^2\) 做平方和合成

平方和有经典恒等式

$$ (A^2+B^2)(C^2+D^2)=(AC-BD)^2+(AD+BC)^2=(AC+BD)^2+(AD-BC)^2 $$

把 \(13=3^2+2^2\) 与步骤 2 中的 \(u^2+v^2=r^2\) 合成,就会得到 \(13r^2\) 的两组候选表示:

$$p=\left|3u-2v\right|,\qquad q=\left|2u+3v\right|,$$

或者

$$p=\left|3u+2v\right|,\qquad q=\left|2u-3v\right|.$$

两种写法都满足

$$p^2+q^2=(3^2+2^2)(u^2+v^2)=13r^2.$$

如果从高层一点的角度看,这正是高斯整数里乘上 \(3+2i\) 或 \(3-2i\) 的实部与虚部。也正因为 \(13\) 在高斯整数中这样分解,所以这两条分支不仅能构造解,而且能覆盖全部本原情形。

步骤 4:回到 \((x,y,z)\),并说明为什么结果仍然是本原的

只要拿到一个满足 \(p^2+q^2=13r^2\) 的正整数对,就定义

$$x=q\,r,\qquad y=p\,r,\qquad z=pq.$$

于是

$$ \frac{1}{x^2}+\frac{1}{y^2} =\frac{1}{q^2r^2}+\frac{1}{p^2r^2} =\frac{p^2+q^2}{p^2q^2r^2} =\frac{13r^2}{p^2q^2r^2} =\frac{13}{z^2}. $$

实现会强制 \(p,q>0\),并要求 \(\gcd(p,q)=1\)。这一条已经足以保证最后的 \((x,y,z)\) 也是本原的。原因是:如果某个素数同时整除 \(r\) 和 \(p\),那么由

$$q^2=13r^2-p^2$$

可知它也会整除 \(q\),这与 \(\gcd(p,q)=1\) 矛盾。因此 \(r\) 与 \(p\)、\(r\) 与 \(q\) 都互素,最终 \(\gcd(x,y,z)=1\)。

为了避免把 \((x,y,z)\) 和交换了 \(x,y\) 的同一个解重复计算,程序会把候选对整理成 \(p\ge q\) 的顺序。如果两条分支恰好产生同一对值,那么第二份会被直接跳过。

步骤 5:推出搜索上界

根据上面的定义,

$$x^2+y^2=r^2(p^2+q^2)=13r^4.$$

而对所有合法解都有 \(x\le N\)、\(y\le N\),因此

$$x^2+y^2\le 2N^2,$$

于是必然满足

$$13r^4\le 2N^2.$$

这就得到一个非常实用的精确上界:

$$r\le r_{\max}=\left\lfloor\left(\frac{2N^2}{13}\right)^{1/4}\right\rfloor.$$

又因为 \(r=m^2+n^2\),所以外层参数 \(m\) 只需要枚举到 \(\lfloor\sqrt{r_{\max}}\rfloor\) 为止。整个搜索区间因此从三维枚举压缩成了一个很薄的二维区域。

示例:\(N=100\)

当 \(N=100\) 时,有

$$13r^4\le 2\cdot 100^2=20000,$$

所以 \(r_{\max}=6\)。

先看 \((m,n)=(1,0)\)。这时

$$u=1,\qquad v=0,\qquad r=1.$$

两条分支都给出同一个候选 \((p,q)=(3,2)\)。因此

$$x=2,\qquad y=3,\qquad z=6,$$

贡献是 \(2+3+6=11\)。

再看 \((m,n)=(2,1)\)。这时

$$u=3,\qquad v=4,\qquad r=5.$$

两条分支分别得到 \((p,q)=(18,1)\) 与 \((17,6)\)。映射回原变量后是

\((x,y,z)=(5,90,18)\) 和 \((30,85,102)\)。

第二个三元组因为 \(z=102>100\) 被过滤掉,第一个三元组保留,贡献 \(5+90+18=113\)。

在 \(r\le 6\) 的范围里没有别的本原参数对,所以

$$S(100)=11+113=124,$$

与实现中的检验值完全一致。

代码如何对应这个公式

C++、Python 和 Java 三个实现的流程是一样的。首先通过整数二分搜索求出满足 \(13r^4\le 2N^2\) 的最大 \(r\)。这样做的好处是边界精确,不会因为浮点近似而漏解或多算。

然后程序遍历所有满足步骤 2 条件的 Euclid 参数 \((m,n)\)。对每一对参数,先算出 \(u\)、\(v\)、\(r\),再生成步骤 3 中的两条线性变换结果。之后把较大的数放在前面,去掉含零候选,去掉与第一条完全重复的第二条分支,并且只保留互素的 \((p,q)\)。

每个保留下来的候选都按 \((x,y,z)=(qr,pr,pq)\) 转回原问题。如果三项都不超过 \(N\),就把 \(x+y+z\) 加入总和。实现还使用了足够宽的整数算术,以保证中间乘法和最终累加都保持精确。

复杂度分析

$$R=\left\lfloor\left(\frac{2N^2}{13}\right)^{1/4}\right\rfloor.$$

搜索只会访问满足 \(m^2+n^2\le R\) 的本原参数对,因此候选数量是 \(O(R)\)。又因为 \(R=\Theta(\sqrt{N})\),所以总时间复杂度是 \(O(\sqrt{N})\)。除去保证整数乘法安全所需的数值对象之外,额外空间复杂度为 \(O(1)\)。

参考资料

  1. 题目页面: Project Euler 748
  2. 勾股三元组参数化: 维基百科 - 勾股数
  3. 两个平方和的合成恒等式: Wikipedia - Brahmagupta-Fibonacci identity
  4. 高斯整数: 维基百科 - 高斯整数
  5. 丢番图方程背景: 维基百科 - 丢番图方程

Краткое описание задачи

Нужно найти все примитивные положительные тройки \((x,y,z)\), удовлетворяющие условию

$$\frac{1}{x^2}+\frac{1}{y^2}=\frac{13}{z^2},\qquad \gcd(x,y,z)=1,$$

при ограничении \(x,y,z\le N\). Для каждой допустимой тройки суммируется \(x+y+z\), то есть вычисляется

$$S(N)=\sum_{\substack{(x,y,z)\text{ примитивно}\\ \frac{1}{x^2}+\frac{1}{y^2}=\frac{13}{z^2}\\ x,y,z\le N}} (x+y+z).$$

Прямой перебор троек до \(N=10^{16}\) невозможен. Поэтому решение сначала преобразует уравнение с обратными квадратами в задачу о представлении числа в виде суммы двух квадратов, а затем использует параметризацию примитивных пифагоровых троек.

Математический подход

Шаг 1: Выделить общий множитель у \(x\) и \(y\)

Пусть

$$x=g\,a,\qquad y=g\,b,\qquad \gcd(a,b)=1.$$

Тогда исходное уравнение превращается в

$$z^2(a^2+b^2)=13g^2a^2b^2.$$

Поскольку \(\gcd(a,a^2+b^2)=\gcd(a,b^2)=1\), число \(a^2\) обязано делить \(z^2\), значит \(a\mid z\). Аналогично \(b\mid z\). Из взаимной простоты \(a\) и \(b\) следует, что

$$z=abk$$

для некоторого целого \(k>0\). После подстановки получаем

$$k^2(a^2+b^2)=13g^2.$$

Примитивность \(\gcd(x,y,z)=1\) влечет \(\gcd(g,z)=1\), а значит и \(\gcd(g,k)=1\). Следовательно, \(k^2\) должно делить \(13\), и единственный возможный вариант:

$$k=1.$$

Тем самым каждая примитивная тройка имеет вид

$$x=q\,r,\qquad y=p\,r,\qquad z=pq,$$

где

$$p^2+q^2=13r^2,\qquad \gcd(p,q)=1.$$

Итак, исходная задача сведена к описанию примитивных представлений \(13r^2\) в виде суммы двух квадратов.

Шаг 2: Параметризовать \(r^2\) примитивной пифагоровой тройкой

Любое примитивное решение уравнения

$$u^2+v^2=r^2$$

задается формулами Евклида:

$$u=m^2-n^2,\qquad v=2mn,\qquad r=m^2+n^2,$$

при условиях

$$m>n\ge 0,\qquad m-n\text{ нечетно},\qquad \gcd(m,n)=1.$$

Разрешение \(n=0\) удобно тем, что случай \(u=1\), \(v=0\), \(r=1\) появляется автоматически. Для больших \(m\) остальные варианты с \(n=0\) сами отбрасываются проверкой взаимной простоты.

Шаг 3: Скомпоновать с \(13=3^2+2^2\)

Используется тождество

$$ (A^2+B^2)(C^2+D^2)=(AC-BD)^2+(AD+BC)^2=(AC+BD)^2+(AD-BC)^2. $$

Если взять \(13=3^2+2^2\) и представление \(r^2=u^2+v^2\), получаются две ветви кандидатов:

$$p=\left|3u-2v\right|,\qquad q=\left|2u+3v\right|,$$

или

$$p=\left|3u+2v\right|,\qquad q=\left|2u-3v\right|.$$

В обоих случаях выполняется

$$p^2+q^2=(3^2+2^2)(u^2+v^2)=13r^2.$$

С точки зрения гауссовых целых это просто умножение на \(3+2i\) или на \(3-2i\). Именно эта факторизация объясняет полноту параметризации для примитивных решений.

Шаг 4: Вернуться к \((x,y,z)\) и сохранить примитивность

Как только найдено положительное решение \((p,q)\) для \(p^2+q^2=13r^2\), задаем

$$x=q\,r,\qquad y=p\,r,\qquad z=pq.$$

Тогда

$$ \frac{1}{x^2}+\frac{1}{y^2} =\frac{1}{q^2r^2}+\frac{1}{p^2r^2} =\frac{p^2+q^2}{p^2q^2r^2} =\frac{13r^2}{p^2q^2r^2} =\frac{13}{z^2}. $$

В реализациях сохраняются только положительные взаимно простые пары \((p,q)\). Этого уже достаточно для примитивности итоговой тройки. Если бы простой делитель делил и \(r\), и \(p\), то из равенства \(q^2=13r^2-p^2\) следовало бы, что он делит и \(q\), что невозможно при \(\gcd(p,q)=1\).

Чтобы не считать одну и ту же тройку дважды с переставленными \(x\) и \(y\), пара упорядочивается так, чтобы \(p\ge q\). Если две ветви вдруг дают один и тот же результат, вторая копия просто пропускается.

Шаг 5: Получить верхнюю границу поиска

Из построения следует

$$x^2+y^2=r^2(p^2+q^2)=13r^4.$$

При \(x\le N\) и \(y\le N\) имеем

$$x^2+y^2\le 2N^2,$$

поэтому для любой допустимой тройки обязательно

$$13r^4\le 2N^2.$$

Значит, достаточно рассматривать только

$$r\le r_{\max}=\left\lfloor\left(\frac{2N^2}{13}\right)^{1/4}\right\rfloor.$$

Так как \(r=m^2+n^2\), внешний параметр \(m\) нужно перебирать лишь до \(\lfloor\sqrt{r_{\max}}\rfloor\).

Разобранный пример: \(N=100\)

Для \(N=100\) имеем

$$13r^4\le 2\cdot 100^2=20000,$$

откуда \(r_{\max}=6\).

Пара \((m,n)=(1,0)\) дает

$$u=1,\qquad v=0,\qquad r=1.$$

Обе ветви совпадают и дают \((p,q)=(3,2)\). Следовательно,

$$x=2,\qquad y=3,\qquad z=6,$$

а вклад равен \(2+3+6=11\).

Пара \((m,n)=(2,1)\) дает

$$u=3,\qquad v=4,\qquad r=5.$$

Из двух ветвей получаются \((p,q)=(18,1)\) и \((17,6)\). После перехода к исходным переменным это

$$ (x,y,z)=(5,90,18)\quad \text{и}\quad (30,85,102). $$

Вторая тройка отбрасывается, потому что \(z=102>100\). Первая вносит \(5+90+18=113\).

Других примитивных параметров с \(r\le 6\) нет, поэтому

$$S(100)=11+113=124,$$

что совпадает с контрольным значением реализации.

Как это отражено в коде

Во всех трех реализациях используется один и тот же конвейер. Сначала целочисленным бинарным поиском находится наибольшее \(r\), для которого верно \(13r^4\le 2N^2\). Это дает точную границу без риска ошибок округления.

Затем перебираются все пары \((m,n)\), удовлетворяющие условиям шага 2. Для каждой пары строятся две линейные формы из шага 3, результат упорядочивается по убыванию, нулевые варианты отбрасываются, совпавшая вторая ветвь подавляется, и остаются только взаимно простые пары.

Каждая оставшаяся пара преобразуется в \((x,y,z)=(qr,pr,pq)\). Если все три значения не превосходят \(N\), к сумме добавляется \(x+y+z\). Для промежуточных произведений и накопления используются достаточно широкие целочисленные типы, чтобы арифметика оставалась точной.

Анализ сложности

Пусть

$$R=\left\lfloor\left(\frac{2N^2}{13}\right)^{1/4}\right\rfloor.$$

Перебор посещает только примитивные пары \((m,n)\) с \(m^2+n^2\le R\), так что число кандидатов равно \(O(R)\). Поскольку \(R=\Theta(\sqrt{N})\), полная временная сложность составляет \(O(\sqrt{N})\). Дополнительная память постоянна, если не считать объектов, необходимых для безопасных целочисленных произведений.

Ссылки и литература

  1. Страница задачи: Project Euler 748
  2. Пифагоровы тройки: Википедия - Пифагоровы тройки
  3. Тождество Брахмагупты-Фибоначчи: Wikipedia - Brahmagupta-Fibonacci identity
  4. Гауссовы целые: Википедия - Гауссовы целые
  5. Диофантовы уравнения: Википедия - Диофантово уравнение

ملخص المسألة

نبحث عن جميع الثلاثيات الصحيحة الموجبة الأولية \((x,y,z)\) التي تحقق

$$\frac{1}{x^2}+\frac{1}{y^2}=\frac{13}{z^2},\qquad \gcd(x,y,z)=1,$$

مع الشرط \(x,y,z\le N\). ولكل ثلاثية صالحة نجمع \(x+y+z\)، ولذلك تكون الكمية المطلوبة هي

$$S(N)=\sum (x+y+z).$$

ويمتد هذا الجمع على جميع الثلاثيات الأولية التي تحقق \(\frac{1}{x^2}+\frac{1}{y^2}=\frac{13}{z^2}\) مع الشرط \(x,y,z\le N\).

الفحص المباشر لكل الثلاثيات حتى \(N=10^{16}\) غير ممكن عمليا. لذلك تعيد الفكرة صياغة المعادلة ذات المقلوبات إلى مسألة من نوع مجموع مربعين، ثم تولد كل الحلول من بارامترات فيثاغورية أولية مع حد بحث دقيق جدا.

المنهج الرياضي

الخطوة 1: فصل العامل المشترك بين \(x\) و\(y\)

نكتب

$$x=g\,a,\qquad y=g\,b,\qquad \gcd(a,b)=1.$$

وبالتعويض في المعادلة الأصلية نحصل على

$$z^2(a^2+b^2)=13g^2a^2b^2.$$

ولأن \(\gcd(a,a^2+b^2)=\gcd(a,b^2)=1\)، فلا بد أن يقسم \(a^2\) العدد \(z^2\)، ومن ثم \(a\mid z\). وبالطريقة نفسها نحصل على \(b\mid z\). وبما أن \(a\) و\(b\) متباينان أوليا فيمكن كتابة

$$z=abk.$$

بعد ذلك تصبح المعادلة

$$k^2(a^2+b^2)=13g^2.$$

ومن شرط الأولية \(\gcd(x,y,z)=1\) نستنتج \(\gcd(g,z)=1\)، وبالتالي \(\gcd(g,k)=1\). لذا يجب أن يكون \(k^2\) قاسما للعدد \(13\)، وهذا لا يترك إلا الاحتمال

$$k=1.$$

إذن كل حل أولي يمكن كتابته على الصورة

$$x=q\,r,\qquad y=p\,r,\qquad z=pq,$$

حيث

$$p^2+q^2=13r^2,\qquad \gcd(p,q)=1.$$

وهكذا تتحول المسألة من معادلة مقلوبة إلى تمثيل أولي للعدد \(13r^2\) كمجموع مربعين.

الخطوة 2: تمثيل \(r^2\) بواسطة ثلاثيات فيثاغورس الأولية

كل حل أولي للمعادلة

$$u^2+v^2=r^2$$

يعطى بصيغة إقليدس:

$$u=m^2-n^2,\qquad v=2mn,\qquad r=m^2+n^2,$$

مع الشروط

$$m>n\ge 0,\qquad \gcd(m,n)=1.$$

ويجب أيضا أن يكون \(m-n\) عددا فرديا.

السماح بالحالة \(n=0\) يجعل الحل الأساسي \(u=1\)، \(v=0\)، \(r=1\) يظهر تلقائيا. أما القيم الأخرى ذات \(n=0\) فتستبعدها تلقائيا قاعدة التباين الأولي.

الخطوة 3: تركيب التمثيل مع \(13=3^2+2^2\)

نستخدم الهوية

$$ (A^2+B^2)(C^2+D^2)=(AC-BD)^2+(AD+BC)^2=(AC+BD)^2+(AD-BC)^2. $$

وبما أن \(13=3^2+2^2\)، فإن دمجها مع \(u^2+v^2=r^2\) يعطي فرعين من المرشحين:

$$p=\left|3u-2v\right|,\qquad q=\left|2u+3v\right|,$$

أو

$$p=\left|3u+2v\right|,\qquad q=\left|2u-3v\right|.$$

وفي الحالتين نحصل على

$$p^2+q^2=(3^2+2^2)(u^2+v^2)=13r^2.$$

ومن منظور الأعداد الغاوسية، هذان الفرعان هما فقط ناتج الضرب في \(3+2i\) أو في \(3-2i\). وهذا يفسر أيضا لماذا تكون هذه الصياغة كاملة بالنسبة للحلول الأولية.

الخطوة 4: الرجوع إلى \((x,y,z)\) وشرح سبب بقاء الحل أوليا

بعد الحصول على زوج موجب \((p,q)\) يحقق \(p^2+q^2=13r^2\)، نعرف

$$x=q\,r,\qquad y=p\,r,\qquad z=pq.$$

وعندئذ

$$ \frac{1}{x^2}+\frac{1}{y^2} =\frac{1}{q^2r^2}+\frac{1}{p^2r^2} =\frac{p^2+q^2}{p^2q^2r^2} =\frac{13r^2}{p^2q^2r^2} =\frac{13}{z^2}. $$

التنفيذ يحتفظ فقط بالأزواج الموجبة ذات \(\gcd(p,q)=1\). وهذا يكفي لضمان أن الثلاثية النهائية أولية. فلو كان هناك عدد أولي يقسم كلا من \(r\) و\(p\)، فالعلاقة

$$q^2=13r^2-p^2$$

تجبره على قسمة \(q\) أيضا، وهو ما يناقض \(\gcd(p,q)=1\). لذلك يكون \(r\) متباينا أوليا مع \(p\) ومع \(q\)، وبالتالي \(\gcd(x,y,z)=1\).

ولكي لا نحسب الحل نفسه مرتين بعد تبديل \(x\) و\(y\)، يرتب التنفيذ الزوج بحيث يكون \(p\ge q\). وإذا أعطى الفرعان الزوج نفسه بالضبط، فإن النسخة الثانية تهمل.

الخطوة 5: اشتقاق حد البحث

من التعريفات السابقة نحصل على

$$x^2+y^2=r^2(p^2+q^2)=13r^4.$$

ومادام \(x\le N\) و\(y\le N\)، فلدينا

$$x^2+y^2\le 2N^2,$$

ومن ثم لا بد لأي حل صالح أن يحقق

$$13r^4\le 2N^2.$$

وعليه يكفي البحث حتى

$$r\le r_{\max}=\left\lfloor\left(\frac{2N^2}{13}\right)^{1/4}\right\rfloor.$$

وبما أن \(r=m^2+n^2\)، فإن البارامتر الخارجي \(m\) لا يحتاج إلى تجاوز \(\lfloor\sqrt{r_{\max}}\rfloor\).

مثال محلول: \(N=100\)

عندما يكون \(N=100\)، نحصل على

$$13r^4\le 2\cdot 100^2=20000,$$

ومن ثم \(r_{\max}=6\).

الزوج \((m,n)=(1,0)\) يعطي

$$u=1,\qquad v=0,\qquad r=1.$$

والفرعان هنا ينهاران إلى الزوج نفسه \((p,q)=(3,2)\). وبالتالي

$$x=2,\qquad y=3,\qquad z=6,$$

ومساهمته \(2+3+6=11\).

أما \((m,n)=(2,1)\) فيعطي

$$u=3,\qquad v=4,\qquad r=5.$$

وينتج عنه الزوجان \((p,q)=(18,1)\) و\((17,6)\). وبعد الرجوع إلى المتغيرات الأصلية نحصل على

\((x,y,z)=(5,90,18)\) و\((30,85,102)\).

الثلاثية الثانية تستبعد لأن \(z=102>100\)، بينما تبقى الأولى وتضيف \(5+90+18=113\).

ولا توجد أزواج أولية أخرى مع \(r\le 6\)، ولذلك

$$S(100)=11+113=124,$$

وهو نفس مقدار الفحص المستخدم في التنفيذ.

كيف تعمل البرمجيات

تنفذ النسخ المكتوبة بلغة C++ وPython وJava الخطوات نفسها. في البداية تحسب أكبر قيمة ممكنة لـ \(r\) بواسطة بحث ثنائي صحيح على المتراجحة \(13r^4\le 2N^2\). بهذه الطريقة يكون الحد الأعلى دقيقا تماما ولا يعتمد على تقريب الأعداد العائمة.

بعد ذلك تمر على جميع أزواج إقليدس \((m,n)\) التي تحقق شرط الفردية والتباين الأولي في الخطوة الثانية. ولكل زوج تحسب التحويلين الخطيين الواردين في الخطوة الثالثة، ثم ترتب الناتج بحيث تأتي القيمة الأكبر أولا، وتحذف القيم الصفرية، وتتجاهل الفرع الثاني إذا كان مكررا للأول، وتبقي فقط الأزواج المتباينة أوليا.

كل زوج ناجح يحول إلى \((x,y,z)=(qr,pr,pq)\). وإذا كانت القيم الثلاث كلها لا تتجاوز \(N\)، يضاف \(x+y+z\) إلى المجموع الجاري. كما تستخدم الأنواع العددية المناسبة حتى تبقى الضربات الوسيطة وعملية التجميع صحيحة تماما.

تحليل التعقيد

لنكتب

$$R=\left\lfloor\left(\frac{2N^2}{13}\right)^{1/4}\right\rfloor.$$

مجال البحث يزور فقط الأزواج الأولية \((m,n)\) التي تحقق \(m^2+n^2\le R\)، ولذلك يكون عدد المرشحين \(O(R)\). وبما أن \(R=\Theta(\sqrt{N})\)، فإن الزمن الكلي هو \(O(\sqrt{N})\). أما الذاكرة الإضافية فتبقى \(O(1)\) باستثناء ما يلزم من حساب صحيح آمن للضرب والتجميع.

مراجع

  1. صفحة المسألة: Project Euler 748
  2. ثلاثيات فيثاغورس: ويكيبيديا - ثلاثية فيثاغورس
  3. هوية براهماغوبتا-فيبوناتشي: Wikipedia - Brahmagupta-Fibonacci identity
  4. الأعداد الغاوسية: ويكيبيديا - عدد غاوسي
  5. المعادلات الديوفانتية: ويكيبيديا - معادلة ديوفانتية