Problem Summary

Let \(a\le b\le c\) be the side lengths of a nondegenerate integer triangle \(ABC\), so its perimeter is

$$p=a+b+c.$$

As in the problem statement, the angle bisectors cut the sides at points \(E,F,G\), and we are interested in the area ratio

$$\frac{[ABC]}{[AEG]}.$$

We must count all integer-sided triangles with

$$a+b+c\le P$$

for which that ratio is an integer. The final count for the full Euler limit is intentionally omitted here.

Mathematical Approach

1. Converting the Geometry into an Arithmetic Ratio

The code does not work directly with angles or areas. It first turns the geometry into a pure arithmetic condition.

Let \(E\) be the point where the bisector at \(A\) meets \(BC\), and let \(G\) be the point where the bisector at \(B\) meets \(AC\). By the angle bisector theorem,

$$\frac{BE}{EC}=\frac{AB}{AC}=\frac{c}{b},\qquad \frac{AG}{GC}=\frac{AB}{BC}=\frac{c}{a}.$$

Because \(BC=a\) and \(AC=b\), this gives

$$EC=\frac{ab}{b+c},\qquad AG=\frac{bc}{a+c}.$$

Now compare areas in two stages. Triangles \(ABC\) and \(AEC\) share the altitude from \(A\) to line \(BC\), so

$$\frac{[ABC]}{[AEC]}=\frac{BC}{EC}=\frac{a}{ab/(b+c)}=\frac{b+c}{b}.$$

Likewise, triangles \(AEC\) and \(AEG\) share the altitude from \(E\) to line \(AC\), so

$$\frac{[AEC]}{[AEG]}=\frac{AC}{AG}=\frac{b}{bc/(a+c)}=\frac{a+c}{c}.$$

Multiplying the two ratios yields the key identity used everywhere in the solver:

$$\frac{[ABC]}{[AEG]}=\frac{(a+b)(a+c)}{bc}.$$

So the whole problem is equivalent to counting triangles for which

$$k=\frac{(a+b)(a+c)}{bc}$$

is an integer.

2. Why Only \(k=2,3,4\) Can Occur

Rewrite \(k\) as

$$k=\left(1+\frac{a}{b}\right)\left(1+\frac{a}{c}\right).$$

Because \(a\le b\le c\), we have

$$0<\frac{a}{c}\le \frac{a}{b}\le 1.$$

Therefore

$$1<k\le 4.$$

Since \(k\) must be an integer, the only possibilities are

$$k\in\{2,3,4\}.$$

This is the decisive simplification behind the code: instead of searching over all possible ratios, we only need to classify three arithmetic cases.

3. The Case \(k=4\): Exactly the Equilateral Triangles

To make

$$\left(1+\frac{a}{b}\right)\left(1+\frac{a}{c}\right)=4,$$

both factors must equal \(2\), because each factor is at most \(2\). That forces

$$a=b=c.$$

Hence the \(k=4\) contribution is simply the number of equilateral triangles with perimeter at most \(P\):

$$\left\lfloor\frac{P}{3}\right\rfloor.$$

4. The Case \(k=2\): A Product Equation

Starting from

$$\frac{(a+b)(a+c)}{bc}=2,$$

we get

$$a^2+a(b+c)=bc.$$

Rearranging gives

$$bc-a(b+c)+a^2=2a^2,$$

hence

$$(b-a)(c-a)=2a^2.$$

Now define

$$d_1=b-a,\qquad d_2=c-a.$$

Then \(d_1,d_2>0\) and

$$d_1d_2=2a^2.$$

Let

$$g=\gcd(d_1,d_2),\qquad d_1=gu,\qquad d_2=gv,\qquad \gcd(u,v)=1.$$

Because \(g\mid a\), write \(a=gh\). Then

$$uv=2h^2.$$

Since \(u\) and \(v\) are coprime and their product is twice a square, one of them must be a square and the other must be twice a square. So, after possibly swapping the two factors, there are exactly two canonical possibilities:

$$u=x^2,\quad v=2y^2,$$

or

$$u=2x^2,\quad v=y^2,$$

with

$$\gcd(x,y)=1.$$

5. The Two \(k=2\) Families

Family A. Take

$$d_1=gx^2,\qquad d_2=2gy^2.$$

Then \(a^2=d_1d_2/2=g^2x^2y^2\), so

$$a=gxy.$$

Therefore

$$b=a+d_1=gx(x+y),$$

$$c=a+d_2=gy(x+2y).$$

The perimeter becomes

$$p=g(x+y)(x+2y).$$

The ordering and triangle inequalities give the parameter range

$$y<x\le \sqrt{2}\,y.$$

Also \(x\) must be odd, because \(u=x^2\) must stay coprime to \(v=2y^2\).

For every primitive pair \((x,y)\), all positive scales

$$1\le g\le \left\lfloor\frac{P}{(x+y)(x+2y)}\right\rfloor$$

produce valid triangles.

Family B. Take

$$d_1=2gx^2,\qquad d_2=gy^2.$$

Then again

$$a=gxy,$$

and now

$$b=a+d_1=gx(2x+y),$$

$$c=a+d_2=gy(x+y).$$

The perimeter is

$$p=g(x+y)(2x+y).$$

The constraints become

$$\sqrt{2}\,x\le y<2x.$$

Here \(y\) must be odd so that \(y^2\) remains coprime to \(2x^2\). The number of valid scales is

$$\left\lfloor\frac{P}{(x+y)(2x+y)}\right\rfloor.$$

6. Worked Example for \(k=2\)

The smallest \(k=2\) triangle already appears in Family B. Take

$$x=2,\qquad y=3,\qquad g=1.$$

Then

$$a=gxy=6,$$

$$b=gx(2x+y)=2(4+3)=14,$$

$$c=gy(x+y)=3(5)=15.$$

So we get the triangle

$$ (a,b,c)=(6,14,15),\qquad p=35. $$

Checking the ratio:

$$\frac{(a+b)(a+c)}{bc}=\frac{20\cdot 21}{14\cdot 15}=2.$$

7. The Case \(k=3\): Another Product Equation

Starting from

$$\frac{(a+b)(a+c)}{bc}=3,$$

we obtain

$$a^2+a(b+c)=2bc.$$

From this, one convenient factorization is

$$(2b-a)(2c-a)=3a^2.$$

Now define

$$u=2b-a,\qquad v=2c-a.$$

Then

$$uv=3a^2.$$

Let

$$u=gs,\qquad v=gt,\qquad \gcd(s,t)=1,\qquad a=gh.$$

Then

$$st=3h^2.$$

Exactly the same squarefree reasoning shows that one factor must be a square and the other three times a square. So there are again two canonical forms:

$$s=x^2,\quad t=3y^2,$$

or

$$s=3x^2,\quad t=y^2,$$

with \(\gcd(x,y)=1\).

8. The Two \(k=3\) Families

Family A. Take

$$u=gx^2,\qquad v=3gy^2.$$

Then

$$a=gxy,$$

$$b=\frac{u+a}{2}=\frac{gx(x+y)}{2},$$

$$c=\frac{v+a}{2}=\frac{gy(x+3y)}{2}.$$

The perimeter is

$$p=\frac{g(x+y)(x+3y)}{2}.$$

The ordering and triangle inequalities become

$$y<x\le \sqrt{3}\,y.$$

Also \(x\not\equiv 0\pmod 3\), otherwise \(x^2\) would not stay coprime to \(3y^2\).

Because the formulas for \(b\) and \(c\) contain division by \(2\), parity matters. If \(x\) and \(y\) are both odd, then every positive \(g\) works. If one of them is even, then only even \(g\) produce integer side lengths.

Define

$$B_A=(x+y)(x+3y),\qquad g_{\max}=\left\lfloor\frac{2P}{B_A}\right\rfloor.$$

The contribution is

$$g_{\max}$$

when \(x,y\) are both odd, and

$$\left\lfloor\frac{g_{\max}}{2}\right\rfloor$$

otherwise.

Family B. Take

$$u=3gx^2,\qquad v=gy^2.$$

Then

$$a=gxy,$$

$$b=\frac{u+a}{2}=\frac{gx(3x+y)}{2},$$

$$c=\frac{v+a}{2}=\frac{gy(x+y)}{2}.$$

The perimeter is

$$p=\frac{g(x+y)(3x+y)}{2}.$$

Now the admissible range is

$$\sqrt{3}\,x\le y<3x,$$

and \(y\not\equiv 0\pmod 3\).

The parity rule is the same as in Family A: all \(g\) work when \(x,y\) are both odd, otherwise only even \(g\) work. If

$$B_B=(x+y)(3x+y),\qquad g_{\max}=\left\lfloor\frac{2P}{B_B}\right\rfloor,$$

then the contribution is \(g_{\max}\) or \(\lfloor g_{\max}/2\rfloor\) according to that parity test.

9. Worked Example for \(k=3\)

The smallest \(k=3\) triangle is the familiar

$$ (4,5,6). $$

It comes from Family B with

$$x=1,\qquad y=2,\qquad g=2.$$

Indeed,

$$a=gxy=4,$$

$$b=\frac{gx(3x+y)}{2}=\frac{2\cdot 1\cdot 5}{2}=5,$$

$$c=\frac{gy(x+y)}{2}=\frac{2\cdot 2\cdot 3}{2}=6.$$

And the ratio is

$$\frac{(a+b)(a+c)}{bc}=\frac{9\cdot 10}{5\cdot 6}=3.$$

This example also illustrates the parity rule: with \(x=1\) and \(y=2\), odd \(g\) would make \(b\) and \(c\) half-integers, so the first legal choice is \(g=2\).

10. Why the Count Has No Double Counting

Every valid triangle belongs to exactly one integer ratio \(k\in\{2,3,4\}\).

The case \(k=4\) is equilateral and is completely separate.

For \(k=2\), once \(d_1=b-a\) and \(d_2=c-a\) are normalized by their gcd, the coprime product \(uv=2h^2\) has a unique squarefree split: the factor \(2\) lies either in the first normalized part or in the second. That is exactly the A/B split above. The same uniqueness argument holds for \(k=3\), with the factor \(3\) lying in one coprime part or the other.

Finally, for fixed primitive parameters \((x,y)\), changing \(g\) only scales the triangle. So every valid triangle is generated exactly once.

11. Validation Checkpoints

Let \(N(P)\) denote the number of valid triangles with perimeter at most \(P\). The code contains a brute-force verifier and checks the fast formulas against it for

$$P\in\{40,60,100,150,200,300\}.$$

Those brute-force totals are

$$N(40)=16,\quad N(60)=26,\quad N(100)=46,$$

$$N(150)=72,\quad N(200)=100,\quad N(300)=160.$$

For example, \(N(40)=16\) breaks into 13 equilateral triangles, two \(k=3\) triangles \((4,5,6)\) and \((8,10,12)\), and one \(k=2\) triangle \((6,14,15)\).

How the Code Works

The function count_valid_triangles(P) starts with the equilateral contribution \(\lfloor P/3\rfloor\), sets

$$\text{max\_var}=\lfloor\sqrt{P}\rfloor+2,$$

and then counts the four nontrivial families. Each family loops over primitive parameter pairs \((x,y)\), applies the coprimality, parity, and mod-3 filters derived above, computes the base perimeter expression, and adds the number of admissible scale factors \(g\).

The four family counters are independent, so the implementation can distribute them across up to four pthread workers. If thread creation fails, it falls back to the serial path. The helper brute_count is used only for checkpoint verification on small perimeter limits.

Complexity Analysis

The parameters \(x\) and \(y\) only range up to \(O(\sqrt{P})\), so the search is roughly quadratic in \(\sqrt{P}\), that is, about \(O(P)\) candidate pairs. Each candidate only needs a gcd computation and a constant amount of integer arithmetic. Thus the solution is fast enough for \(P=10^8\) while using only constant extra memory apart from tiny thread-local contexts.

Footnotes and References

  1. Problem page: https://projecteuler.net/problem=257
  2. Angle bisector theorem: Wikipedia - Angle bisector theorem
  3. Diophantine equations: Wikipedia - Diophantine equation
  4. Coprime integers: Wikipedia - Coprime integers
  5. Floor and ceiling functions: Wikipedia - Floor and ceiling functions

Problemzusammenfassung

Seien \(a\le b\le c\) die Seitenlängen eines nichtentarteten ganzzahligen Dreiecks \(ABC\). Der Umfang ist

$$p=a+b+c.$$

Wie in der Aufgabenstellung schneiden die Winkelhalbierenden die Seiten in den Punkten \(E,F,G\), und relevant ist das Flächenverhältnis

$$\frac{[ABC]}{[AEG]}.$$

Gesucht ist die Anzahl aller ganzzahligen Dreiecke mit

$$a+b+c\le P$$

für die dieses Verhältnis ganzzahlig ist. Der endgültige Euler-Wert wird hier absichtlich nicht angegeben.

Mathematischer Ansatz

1. Von der Geometrie zur arithmetischen Formel

Der Code arbeitet nicht direkt mit Flächen, sondern reduziert alles auf eine Seitenformel.

Sei \(E\) der Schnittpunkt der Winkelhalbierenden bei \(A\) mit \(BC\), und \(G\) der Schnittpunkt der Winkelhalbierenden bei \(B\) mit \(AC\). Nach dem Winkelhalbierendensatz gilt

$$\frac{BE}{EC}=\frac{AB}{AC}=\frac{c}{b},\qquad \frac{AG}{GC}=\frac{AB}{BC}=\frac{c}{a}.$$

Mit \(BC=a\) und \(AC=b\) folgt

$$EC=\frac{ab}{b+c},\qquad AG=\frac{bc}{a+c}.$$

Die Dreiecke \(ABC\) und \(AEC\) haben dieselbe Höhe auf \(BC\), also

$$\frac{[ABC]}{[AEC]}=\frac{BC}{EC}=\frac{b+c}{b}.$$

Ebenso haben \(AEC\) und \(AEG\) dieselbe Höhe auf \(AC\), daher

$$\frac{[AEC]}{[AEG]}=\frac{AC}{AG}=\frac{a+c}{c}.$$

Multiplikation liefert die zentrale Identität:

$$\frac{[ABC]}{[AEG]}=\frac{(a+b)(a+c)}{bc}.$$

Damit ist das Problem äquivalent dazu, die ganzzahligen Dreiecke mit

$$k=\frac{(a+b)(a+c)}{bc}\in \mathbb Z$$

zu zählen.

2. Warum nur \(k=2,3,4\) möglich sind

Man schreibt

$$k=\left(1+\frac{a}{b}\right)\left(1+\frac{a}{c}\right).$$

Wegen \(a\le b\le c\) gilt

$$0<\frac{a}{c}\le \frac{a}{b}\le 1,$$

also

$$1<k\le 4.$$

Da \(k\) ganzzahlig sein muss, bleiben nur

$$k\in\{2,3,4\}.$$

3. Der Fall \(k=4\): genau die gleichseitigen Dreiecke

Damit

$$\left(1+\frac{a}{b}\right)\left(1+\frac{a}{c}\right)=4$$

gilt, müssen beide Faktoren gleich \(2\) sein. Also folgt sofort

$$a=b=c.$$

Die Anzahl dieser Dreiecke ist daher einfach

$$\left\lfloor\frac{P}{3}\right\rfloor.$$

4. Der Fall \(k=2\): Produktgleichung

Aus

$$\frac{(a+b)(a+c)}{bc}=2$$

folgt

$$a^2+a(b+c)=bc,$$

also

$$(b-a)(c-a)=2a^2.$$

Setze

$$d_1=b-a,\qquad d_2=c-a.$$

Dann gilt

$$d_1d_2=2a^2.$$

Mit

$$g=\gcd(d_1,d_2),\qquad d_1=gu,\qquad d_2=gv,\qquad \gcd(u,v)=1$$

und \(a=gh\) erhält man

$$uv=2h^2.$$

Da \(u\) und \(v\) teilerfremd sind, muss einer der beiden Faktoren ein Quadrat und der andere das Doppelte eines Quadrats sein. Also gibt es genau zwei kanonische Formen:

$$u=x^2,\quad v=2y^2,$$

oder

$$u=2x^2,\quad v=y^2,$$

mit \(\gcd(x,y)=1\).

5. Die zwei \(k=2\)-Familien

Familie A. Sei

$$d_1=gx^2,\qquad d_2=2gy^2.$$

Dann ist

$$a=gxy,\qquad b=gx(x+y),\qquad c=gy(x+2y),$$

und der Umfang lautet

$$p=g(x+y)(x+2y).$$

Die Nebenbedingungen werden zu

$$y<x\le \sqrt{2}\,y.$$

Außerdem muss \(x\) ungerade sein, damit \(x^2\) zu \(2y^2\) teilerfremd bleibt. Für ein primitives Paar \((x,y)\) ist die Zahl zulässiger Skalierungen

$$\left\lfloor\frac{P}{(x+y)(x+2y)}\right\rfloor.$$

Familie B. Sei

$$d_1=2gx^2,\qquad d_2=gy^2.$$

Dann folgt

$$a=gxy,\qquad b=gx(2x+y),\qquad c=gy(x+y),$$

und

$$p=g(x+y)(2x+y).$$

Hier gilt

$$\sqrt{2}\,x\le y<2x,$$

und \(y\) muss ungerade sein. Die Anzahl der Skalierungen ist

$$\left\lfloor\frac{P}{(x+y)(2x+y)}\right\rfloor.$$

6. Beispiel für \(k=2\)

Das kleinste \(k=2\)-Dreieck stammt bereits aus Familie B. Wähle

$$x=2,\qquad y=3,\qquad g=1.$$

Dann ergibt sich

$$a=6,\qquad b=14,\qquad c=15,$$

also

$$ (a,b,c)=(6,14,15),\qquad p=35. $$

Kontrolle:

$$\frac{(a+b)(a+c)}{bc}=\frac{20\cdot 21}{14\cdot 15}=2.$$

7. Der Fall \(k=3\): zweite Produktgleichung

Aus

$$\frac{(a+b)(a+c)}{bc}=3$$

folgt

$$a^2+a(b+c)=2bc,$$

und damit

$$(2b-a)(2c-a)=3a^2.$$

Setze

$$u=2b-a,\qquad v=2c-a.$$

Dann gilt

$$uv=3a^2.$$

Mit

$$u=gs,\qquad v=gt,\qquad \gcd(s,t)=1,\qquad a=gh$$

erhält man

$$st=3h^2.$$

Wieder ist einer der beiden teilerfremden Faktoren ein Quadrat und der andere das Dreifache eines Quadrats. Also:

$$s=x^2,\quad t=3y^2,$$

oder

$$s=3x^2,\quad t=y^2.$$

8. Die zwei \(k=3\)-Familien

Familie A. Sei

$$u=gx^2,\qquad v=3gy^2.$$

Dann

$$a=gxy,\qquad b=\frac{gx(x+y)}{2},\qquad c=\frac{gy(x+3y)}{2},$$

und

$$p=\frac{g(x+y)(x+3y)}{2}.$$

Die Bereichsbedingungen sind

$$y<x\le \sqrt{3}\,y,$$

außerdem \(x\not\equiv 0\pmod 3\).

Wegen der Division durch \(2\) in \(b\) und \(c\) spielt die Parität von \(g\) eine Rolle. Sind \(x\) und \(y\) beide ungerade, so ist jedes \(g\) erlaubt. Andernfalls funktioniert nur gerades \(g\).

Mit

$$B_A=(x+y)(x+3y),\qquad g_{\max}=\left\lfloor\frac{2P}{B_A}\right\rfloor$$

ist der Beitrag also \(g_{\max}\) oder \(\lfloor g_{\max}/2\rfloor\).

Familie B. Sei

$$u=3gx^2,\qquad v=gy^2.$$

Dann

$$a=gxy,\qquad b=\frac{gx(3x+y)}{2},\qquad c=\frac{gy(x+y)}{2},$$

mit Umfang

$$p=\frac{g(x+y)(3x+y)}{2}.$$

Hier gilt

$$\sqrt{3}\,x\le y<3x,$$

und \(y\not\equiv 0\pmod 3\). Die Paritätsregel für \(g\) ist dieselbe wie in Familie A.

9. Beispiel für \(k=3\)

Das kleinste \(k=3\)-Dreieck ist

$$ (4,5,6). $$

Es entsteht aus Familie B mit

$$x=1,\qquad y=2,\qquad g=2.$$

Denn

$$a=4,\qquad b=5,\qquad c=6,$$

und

$$\frac{(a+b)(a+c)}{bc}=\frac{9\cdot 10}{5\cdot 6}=3.$$

Hier sieht man auch die Paritätsbedingung: Für ungerades \(g\) wären \(b\) und \(c\) keine ganzen Zahlen.

10. Warum nichts doppelt gezählt wird

Jedes gültige Dreieck besitzt genau einen ganzzahligen Wert \(k\in\{2,3,4\}\).

Der Fall \(k=4\) ist vollständig gleichseitig und separat. In den Fällen \(k=2\) und \(k=3\) ist nach Herausziehen des ggT und Zerlegung in teilerfremde Faktoren eindeutig festgelegt, in welchem Teil der quadratfreie Faktor \(2\) bzw. \(3\) liegt. Genau daraus entsteht die A/B-Aufteilung. Der Skalierungsfaktor \(g\) ist anschließend ebenfalls eindeutig. Somit wird jedes Dreieck genau einmal erzeugt.

11. Validierungs-Checkpoints

Sei \(N(P)\) die Anzahl gültiger Dreiecke mit Umfang höchstens \(P\). Der Code vergleicht die schnelle Formel mit einer Brute-Force-Zählung für

$$P\in\{40,60,100,150,200,300\}.$$

Die entsprechenden Werte sind

$$N(40)=16,\quad N(60)=26,\quad N(100)=46,$$

$$N(150)=72,\quad N(200)=100,\quad N(300)=160.$$

Funktionsweise des Codes

count_valid_triangles(P) startet mit dem gleichseitigen Beitrag \(\lfloor P/3\rfloor\), setzt

$$\text{max\_var}=\lfloor\sqrt{P}\rfloor+2,$$

und summiert dann die vier parametrisierten Familien. Jede Zählfunktion iteriert über primitive Paare \((x,y)\), prüft ggT, Parität und Modulo-3-Bedingungen, berechnet den Basisumfang und addiert die zulässige Zahl von Skalierungsfaktoren \(g\).

Da die vier Familien unabhängig sind, kann der Code sie parallel auf bis zu vier pthread-Worker verteilen. Für kleine Kontrollwerte dient brute_count als exakter Vergleich.

Komplexitätsanalyse

Die Parameter \(x\) und \(y\) laufen nur bis \(O(\sqrt{P})\), also ist die Suche quadratisch in \(\sqrt{P}\), praktisch also etwa \(O(P)\) Kandidatenpaare. Pro Kandidat fallen nur ein ggT und konstante Ganzzahlarithmetik an. Der Speicherverbrauch bleibt bis auf kleine Thread-Kontexte konstant.

Fußnoten und Quellen

  1. Problemseite: https://projecteuler.net/problem=257
  2. Winkelhalbierendensatz: Wikipedia - Angle bisector theorem
  3. Diophantische Gleichungen: Wikipedia
  4. Teilerfremdheit: Wikipedia
  5. Gaußklammern: Wikipedia - Floor and ceiling functions

Problem Özeti

\(a\le b\le c\) olan ve dejenere olmayan bir \(ABC\) üçgeninin tam sayı kenar uzunlukları verilsin. Çevre

$$p=a+b+c$$

olsun. Problemdeki gibi açıortaylar kenarları \(E,F,G\) noktalarında kesiyor ve ilgilendiğimiz oran

$$\frac{[ABC]}{[AEG]}$$

oluyor. Amaç,

$$a+b+c\le P$$

koşulunu sağlayan tam sayı kenarlı üçgenler arasında bu oranı tam sayı yapanların sayısını bulmak. Tam Euler limiti için nihai değer burada özellikle verilmez.

Matematiksel Yaklaşım

1. Geometriyi Aritmetik Orana Çevirme

Kod doğrudan alanlarla çalışmıyor; önce problemi tamamen kenar uzunlukları cinsinden yazıyor.

\(E\), \(A\) açısının açıortayının \(BC\) ile kesişimi; \(G\) ise \(B\) açısının açıortayının \(AC\) ile kesişimi olsun. Açıortay teoreminden

$$\frac{BE}{EC}=\frac{AB}{AC}=\frac{c}{b},\qquad \frac{AG}{GC}=\frac{AB}{BC}=\frac{c}{a}$$

elde edilir. Buradan

$$EC=\frac{ab}{b+c},\qquad AG=\frac{bc}{a+c}$$

çıkar.

\(ABC\) ve \(AEC\) üçgenleri \(BC\) doğrusu üzerine aynı yüksekliği paylaştığı için

$$\frac{[ABC]}{[AEC]}=\frac{BC}{EC}=\frac{b+c}{b}.$$

Aynı şekilde \(AEC\) ile \(AEG\), \(AC\) doğrusu üzerine aynı yüksekliği paylaştığından

$$\frac{[AEC]}{[AEG]}=\frac{AC}{AG}=\frac{a+c}{c}.$$

Çarpınca çözümün temel bağıntısı gelir:

$$\frac{[ABC]}{[AEG]}=\frac{(a+b)(a+c)}{bc}.$$

Dolayısıyla artık saymamız gereken nesneler,

$$k=\frac{(a+b)(a+c)}{bc}$$

değeri tam sayı olan üçgenlerdir.

2. Neden Sadece \(k=2,3,4\) Mümkün

Şunu yazalım:

$$k=\left(1+\frac{a}{b}\right)\left(1+\frac{a}{c}\right).$$

\(a\le b\le c\) olduğundan

$$0<\frac{a}{c}\le \frac{a}{b}\le 1$$

ve dolayısıyla

$$1<k\le 4$$

olur. \(k\) tam sayı olmak zorunda olduğuna göre geriye yalnızca

$$k\in\{2,3,4\}$$

kalır. Kodun bütün gücü buradan gelir: sonsuz oran olasılığı yerine yalnızca üç aritmetik sınıf sayılır.

3. \(k=4\) Durumu: Tam Olarak Eşkenarlar

\(k=4\) olabilmesi için

$$\left(1+\frac{a}{b}\right)\left(1+\frac{a}{c}\right)=4$$

eşitliğinde her iki çarpanın da 2 olması gerekir; çünkü her biri en fazla 2 olabilir. Bu da doğrudan

$$a=b=c$$

demektir. O halde bu ailenin katkısı

$$\left\lfloor\frac{P}{3}\right\rfloor$$

olur.

4. \(k=2\) Durumu: Çarpım Denklemine Geçiş

\(k=2\) için

$$\frac{(a+b)(a+c)}{bc}=2$$

yazar ve düzenlersek

$$(b-a)(c-a)=2a^2$$

elde ederiz.

Şimdi

$$d_1=b-a,\qquad d_2=c-a$$

tanımını yapalım. Böylece

$$d_1d_2=2a^2.$$

Ayrıca

$$g=\gcd(d_1,d_2),\qquad d_1=gu,\qquad d_2=gv,\qquad \gcd(u,v)=1$$

olsun. \(g\mid a\) olduğundan \(a=gh\) yazabiliriz ve

$$uv=2h^2$$

kalır. \(u\) ile \(v\) aralarında asal olduğu için, bunlardan biri kare, diğeri ise iki ile çarpılmış kare olmak zorundadır. Bu da tam olarak iki kanonik aile verir:

$$u=x^2,\quad v=2y^2$$

veya

$$u=2x^2,\quad v=y^2,$$

burada \(\gcd(x,y)=1\).

5. İki \(k=2\) Ailesi

Ailesi A. Şunu alalım:

$$d_1=gx^2,\qquad d_2=2gy^2.$$

O zaman

$$a=gxy,\qquad b=gx(x+y),\qquad c=gy(x+2y)$$

ve çevre

$$p=g(x+y)(x+2y)$$

olur. Sıralama ve üçgen eşitsizliği şu aralığı verir:

$$y<x\le \sqrt{2}\,y.$$

Ayrıca \(x\) tek olmalıdır; çünkü \(x^2\)'nin \(2y^2\) ile aralarında asal kalması gerekir. Her ilkel \((x,y)\) çifti için geçerli ölçek sayısı

$$\left\lfloor\frac{P}{(x+y)(x+2y)}\right\rfloor$$

olur.

Ailesi B. Bu kez

$$d_1=2gx^2,\qquad d_2=gy^2$$

alınır. O zaman

$$a=gxy,\qquad b=gx(2x+y),\qquad c=gy(x+y)$$

ve

$$p=g(x+y)(2x+y)$$

elde edilir. Şartlar

$$\sqrt{2}\,x\le y<2x$$

şeklindedir ve bu kez \(y\) tek olmalıdır. Ölçek sayısı

$$\left\lfloor\frac{P}{(x+y)(2x+y)}\right\rfloor$$

olur.

6. \(k=2\) İçin Çalışan Örnek

En küçük \(k=2\) üçgeni Aile B'den gelir. Şöyle seçelim:

$$x=2,\qquad y=3,\qquad g=1.$$

Böylece

$$a=6,\qquad b=14,\qquad c=15$$

ve

$$ (a,b,c)=(6,14,15),\qquad p=35 $$

olur. Doğrulama:

$$\frac{(a+b)(a+c)}{bc}=\frac{20\cdot 21}{14\cdot 15}=2.$$

7. \(k=3\) Durumu: İkinci Çarpım Denklemine Geçiş

\(k=3\) için

$$\frac{(a+b)(a+c)}{bc}=3$$

başlangıcından

$$(2b-a)(2c-a)=3a^2$$

eşitliği çıkar.

Şimdi

$$u=2b-a,\qquad v=2c-a$$

tanımını yapalım. Böylece

$$uv=3a^2.$$

Yine

$$u=gs,\qquad v=gt,\qquad \gcd(s,t)=1,\qquad a=gh$$

yazarsak

$$st=3h^2$$

olur. Aralarında asal iki çarpandan biri kare, diğeri 3 ile çarpılmış kare olmalıdır. Dolayısıyla iki kanonik ayrışım vardır:

$$s=x^2,\quad t=3y^2$$

veya

$$s=3x^2,\quad t=y^2.$$

8. İki \(k=3\) Ailesi

Ailesi A. Şunu alalım:

$$u=gx^2,\qquad v=3gy^2.$$

Bu durumda

$$a=gxy,\qquad b=\frac{gx(x+y)}{2},\qquad c=\frac{gy(x+3y)}{2}$$

ve

$$p=\frac{g(x+y)(x+3y)}{2}$$

olur. Parametre aralığı

$$y<x\le \sqrt{3}\,y$$

şeklindedir ve ayrıca \(x\not\equiv 0\pmod 3\) gerekir.

\(b\) ve \(c\) formüllerinde 2'ye bölme olduğu için \(g\)'nin paritesi önem kazanır. \(x\) ve \(y\) ikisi birden tek ise her \(g\) çalışır; aksi halde yalnızca çift \(g\) çalışır.

$$B_A=(x+y)(x+3y),\qquad g_{\max}=\left\lfloor\frac{2P}{B_A}\right\rfloor$$

dersek katkı, duruma göre \(g_{\max}\) veya \(\lfloor g_{\max}/2\rfloor\) olur.

Ailesi B. Bu kez

$$u=3gx^2,\qquad v=gy^2$$

alınır. O zaman

$$a=gxy,\qquad b=\frac{gx(3x+y)}{2},\qquad c=\frac{gy(x+y)}{2}$$

ve

$$p=\frac{g(x+y)(3x+y)}{2}$$

elde edilir. Şartlar

$$\sqrt{3}\,x\le y<3x$$

ve \(y\not\equiv 0\pmod 3\) biçimindedir. \(g\)'nin parite filtresi burada da aynıdır.

9. \(k=3\) İçin Çalışan Örnek

En küçük \(k=3\) üçgeni bilinen

$$ (4,5,6) $$

üçgenidir. Bu, Aile B'de

$$x=1,\qquad y=2,\qquad g=2$$

seçiminden gelir. Gerçekten

$$a=4,\qquad b=5,\qquad c=6$$

ve

$$\frac{(a+b)(a+c)}{bc}=\frac{9\cdot 10}{5\cdot 6}=3$$

olur. Burada \(g\)'nin neden çift olması gerektiği de açıkça görülür.

10. Neden Çifte Sayım Yok

Her geçerli üçgenin tek bir \(k\in\{2,3,4\}\) değeri vardır. \(k=4\) ailesi eşkenarlardan ibarettir ve ayrıdır. \(k=2\) ve \(k=3\) durumlarında ise, gcd ile normalleştirdikten sonra kare-dışı çarpan olan 2 veya 3'ün hangi tarafta durduğu tek biçimde belirlenir; bu da A/B ayrımıdır. Son olarak \(g\) da benzersiz ölçek faktörüdür. Böylece her üçgen tam bir kez üretilir.

11. Doğrulama Kontrol Noktaları

\(N(P)\), çevresi en çok \(P\) olan geçerli üçgen sayısı olsun. Kod, hızlı yöntemi küçük \(P\) değerlerinde brute-force ile karşılaştırır:

$$P\in\{40,60,100,150,200,300\}.$$

Bu değerler için sonuçlar

$$N(40)=16,\quad N(60)=26,\quad N(100)=46,$$

$$N(150)=72,\quad N(200)=100,\quad N(300)=160$$

şeklindedir. Örneğin \(P=40\) için 13 eşkenar, iki adet \(k=3\) ve bir adet \(k=2\) üçgen vardır.

Kod Nasıl Çalışıyor

count_valid_triangles(P) önce eşkenar katkıyı \(\lfloor P/3\rfloor\) olarak ekler, sonra

$$\text{max\_var}=\lfloor\sqrt{P}\rfloor+2$$

değerini hesaplar ve dört parametrik aileyi ayrı ayrı sayar. Her aile sayacı, ilkel \((x,y)\) çiftlerini dolaşır, gcd/parite/mod-3 filtrelerini uygular, taban çevre ifadesini çıkarır ve geçerli \(g\) sayısını toplar.

Dört aile birbirinden bağımsız olduğu için kod bunları en fazla dört pthread işçisine dağıtabilir. Küçük çevrelerde brute_count fonksiyonu doğrulama amacıyla kullanılır.

Karmaşıklık Analizi

\(x\) ve \(y\) parametreleri ancak \(O(\sqrt{P})\) mertebesine kadar çıkar. Dolayısıyla arama, \(\sqrt{P}\) üzerinde yaklaşık ikinci derecedir; pratikte yaklaşık \(O(P)\) aday çift demektir. Her aday için bir gcd ve sabit sayıda tamsayı işlemi yapılır. Bellek kullanımı ise küçük iş parçacığı bağlamları dışında sabittir.

Dipnotlar ve Kaynaklar

  1. Problem sayfası: https://projecteuler.net/problem=257
  2. Açıortay teoremi: Wikipedia - Angle bisector theorem
  3. Diofant denklemleri: Wikipedia
  4. Aralarında asal sayılar: Wikipedia
  5. Taban ve tavan fonksiyonları: Wikipedia - Floor and ceiling functions

Resumen del Problema

Sean \(a\le b\le c\) los lados enteros de un triangulo no degenerado \(ABC\). Su perimetro es

$$p=a+b+c.$$

Como en el enunciado, las bisectrices cortan los lados en \(E,F,G\), y el cociente relevante es

$$\frac{[ABC]}{[AEG]}.$$

Hay que contar todos los triangulos de lados enteros con

$$a+b+c\le P$$

para los que ese cociente sea entero. El valor final del limite grande se omite aqui deliberadamente.

Enfoque Matematico

1. Pasar de la geometria a una formula aritmetica

La solucion no trabaja directamente con areas; primero las reescribe en funcion de \(a,b,c\).

Sea \(E\) el punto donde la bisectriz en \(A\) corta a \(BC\), y sea \(G\) el punto donde la bisectriz en \(B\) corta a \(AC\). Por el teorema de la bisectriz,

$$\frac{BE}{EC}=\frac{AB}{AC}=\frac{c}{b},\qquad \frac{AG}{GC}=\frac{AB}{BC}=\frac{c}{a}.$$

Como \(BC=a\) y \(AC=b\), se obtiene

$$EC=\frac{ab}{b+c},\qquad AG=\frac{bc}{a+c}.$$

Los triangulos \(ABC\) y \(AEC\) comparten altura sobre \(BC\), asi que

$$\frac{[ABC]}{[AEC]}=\frac{BC}{EC}=\frac{b+c}{b}.$$

Igualmente, \(AEC\) y \(AEG\) comparten altura sobre \(AC\), luego

$$\frac{[AEC]}{[AEG]}=\frac{AC}{AG}=\frac{a+c}{c}.$$

Al multiplicar aparece la identidad central:

$$\frac{[ABC]}{[AEG]}=\frac{(a+b)(a+c)}{bc}.$$

Por tanto el problema equivale a contar los triangulos para los que

$$k=\frac{(a+b)(a+c)}{bc}$$

es entero.

2. Solo pueden aparecer \(k=2,3,4\)

Reescribimos

$$k=\left(1+\frac{a}{b}\right)\left(1+\frac{a}{c}\right).$$

Dado que \(a\le b\le c\), se cumple

$$0<\frac{a}{c}\le \frac{a}{b}\le 1,$$

y por ello

$$1<k\le 4.$$

Como \(k\) debe ser entero, los unicos valores posibles son

$$k\in\{2,3,4\}.$$

3. Caso \(k=4\): exactamente los equilateros

Para que

$$\left(1+\frac{a}{b}\right)\left(1+\frac{a}{c}\right)=4$$

se cumpla, ambos factores tienen que valer 2, pues ninguno puede superar 2. Eso obliga a

$$a=b=c.$$

La contribucion de este caso es entonces

$$\left\lfloor\frac{P}{3}\right\rfloor.$$

4. Caso \(k=2\): ecuacion producto

Partiendo de

$$\frac{(a+b)(a+c)}{bc}=2$$

se llega a

$$(b-a)(c-a)=2a^2.$$

Definimos

$$d_1=b-a,\qquad d_2=c-a,$$

y asi

$$d_1d_2=2a^2.$$

Tomemos

$$g=\gcd(d_1,d_2),\qquad d_1=gu,\qquad d_2=gv,\qquad \gcd(u,v)=1.$$

Como \(g\mid a\), escribimos \(a=gh\), y queda

$$uv=2h^2.$$

Al ser \(u\) y \(v\) coprimos, uno debe ser un cuadrado y el otro el doble de un cuadrado. Por tanto hay dos formas canonicas:

$$u=x^2,\quad v=2y^2,$$

o bien

$$u=2x^2,\quad v=y^2,$$

con \(\gcd(x,y)=1\).

5. Las dos familias para \(k=2\)

Familia A. Sea

$$d_1=gx^2,\qquad d_2=2gy^2.$$

Entonces

$$a=gxy,\qquad b=gx(x+y),\qquad c=gy(x+2y),$$

y el perimetro vale

$$p=g(x+y)(x+2y).$$

Las restricciones se convierten en

$$y<x\le \sqrt{2}\,y.$$

Ademas \(x\) debe ser impar. El numero de escalas validas es

$$\left\lfloor\frac{P}{(x+y)(x+2y)}\right\rfloor.$$

Familia B. Sea

$$d_1=2gx^2,\qquad d_2=gy^2.$$

Entonces

$$a=gxy,\qquad b=gx(2x+y),\qquad c=gy(x+y),$$

con

$$p=g(x+y)(2x+y).$$

Ahora las condiciones son

$$\sqrt{2}\,x\le y<2x,$$

y \(y\) debe ser impar. Su contribucion es

$$\left\lfloor\frac{P}{(x+y)(2x+y)}\right\rfloor.$$

6. Ejemplo para \(k=2\)

El menor triangulo con \(k=2\) sale ya de la Familia B. Tomemos

$$x=2,\qquad y=3,\qquad g=1.$$

Entonces

$$a=6,\qquad b=14,\qquad c=15,$$

de modo que

$$ (a,b,c)=(6,14,15),\qquad p=35. $$

La comprobacion directa da

$$\frac{(a+b)(a+c)}{bc}=\frac{20\cdot 21}{14\cdot 15}=2.$$

7. Caso \(k=3\): segunda ecuacion producto

Partiendo de

$$\frac{(a+b)(a+c)}{bc}=3$$

se obtiene

$$(2b-a)(2c-a)=3a^2.$$

Definimos

$$u=2b-a,\qquad v=2c-a,$$

de modo que

$$uv=3a^2.$$

Escribimos

$$u=gs,\qquad v=gt,\qquad \gcd(s,t)=1,\qquad a=gh,$$

y por tanto

$$st=3h^2.$$

Asi, uno de los factores es un cuadrado y el otro es tres veces un cuadrado:

$$s=x^2,\quad t=3y^2,$$

o

$$s=3x^2,\quad t=y^2.$$

8. Las dos familias para \(k=3\)

Familia A. Sea

$$u=gx^2,\qquad v=3gy^2.$$

Entonces

$$a=gxy,\qquad b=\frac{gx(x+y)}{2},\qquad c=\frac{gy(x+3y)}{2},$$

y

$$p=\frac{g(x+y)(x+3y)}{2}.$$

Las restricciones son

$$y<x\le \sqrt{3}\,y,$$

junto con \(x\not\equiv 0\pmod 3\).

Como \(b\) y \(c\) llevan un factor \(1/2\), la paridad de \(g\) importa. Si \(x\) e \(y\) son ambos impares, cualquier \(g\) sirve. Si no, solo sirven \(g\) pares.

Con

$$B_A=(x+y)(x+3y),\qquad g_{\max}=\left\lfloor\frac{2P}{B_A}\right\rfloor,$$

la contribucion es \(g_{\max}\) o \(\lfloor g_{\max}/2\rfloor\).

Familia B. Sea

$$u=3gx^2,\qquad v=gy^2.$$

Entonces

$$a=gxy,\qquad b=\frac{gx(3x+y)}{2},\qquad c=\frac{gy(x+y)}{2},$$

con perimetro

$$p=\frac{g(x+y)(3x+y)}{2}.$$

Aqui se exige

$$\sqrt{3}\,x\le y<3x,$$

y \(y\not\equiv 0\pmod 3\). La regla de paridad para \(g\) es la misma.

9. Ejemplo para \(k=3\)

El menor triangulo con \(k=3\) es

$$ (4,5,6). $$

Proviene de la Familia B con

$$x=1,\qquad y=2,\qquad g=2.$$

Se obtiene

$$a=4,\qquad b=5,\qquad c=6,$$

y

$$\frac{(a+b)(a+c)}{bc}=\frac{9\cdot 10}{5\cdot 6}=3.$$

10. Por que no hay doble conteo

Cada triangulo valido tiene un unico \(k\in\{2,3,4\}\). El caso \(k=4\) es solo equilatero. En \(k=2\) y \(k=3\), una vez normalizados los factores por su gcd, queda determinado de manera unica en que lado cae el factor libre de cuadrados, 2 o 3. Eso produce exactamente la separacion A/B. Luego \(g\) es el factor de escala unico. Asi, cada triangulo se genera una sola vez.

11. Puntos de verificacion

Si \(N(P)\) es el numero de triangulos validos con perimetro a lo sumo \(P\), el codigo compara la formula rapida con una busqueda brute force para

$$P\in\{40,60,100,150,200,300\}.$$

Los valores son

$$N(40)=16,\quad N(60)=26,\quad N(100)=46,$$

$$N(150)=72,\quad N(200)=100,\quad N(300)=160.$$

Como Funciona el Codigo

count_valid_triangles(P) comienza con la contribucion equilatera \(\lfloor P/3\rfloor\), fija

$$\text{max\_var}=\lfloor\sqrt{P}\rfloor+2,$$

y luego suma las cuatro familias no triviales. Cada contador recorre pares primitivos \((x,y)\), aplica filtros de coprimalidad, paridad y modulo 3, calcula el perimetro base y suma el numero de escalas \(g\) permitidas.

Como las cuatro familias son independientes, la implementacion puede repartirlas entre hasta cuatro hilos pthread. Para los limites pequenos, brute_count sirve de verificacion exacta.

Analisis de Complejidad

Los parametros \(x\) e \(y\) solo llegan hasta \(O(\sqrt{P})\), asi que el recorrido es cuadratico en \(\sqrt{P}\), es decir, alrededor de \(O(P)\) pares candidatos. Cada par requiere solo un gcd y aritmetica entera constante. La memoria adicional es constante, salvo pequenos contextos de hilo.

Notas y Referencias

  1. Pagina del problema: https://projecteuler.net/problem=257
  2. Teorema de la bisectriz: Wikipedia - Angle bisector theorem
  3. Ecuaciones diofanticas: Wikipedia
  4. Numeros coprimos: Wikipedia
  5. Funciones suelo y techo: Wikipedia - Floor and ceiling functions

问题概述

设 \(a\le b\le c\) 是非退化整数三角形 \(ABC\) 的三边,则周长为

$$p=a+b+c.$$

按照题目中的记号,角平分线把边切分于点 \(E,F,G\),我们关心的面积比是

$$\frac{[ABC]}{[AEG]}.$$

要求统计所有满足

$$a+b+c\le P$$

且该比值为整数的整边三角形。完整 Euler 极限下的最终答案这里不直接写出。

数学方法

1. 先把几何量化为边长公式

代码并不直接计算面积,而是先把问题改写成纯算术条件。

设 \(E\) 是 \(A\) 点角平分线与 \(BC\) 的交点,\(G\) 是 \(B\) 点角平分线与 \(AC\) 的交点。由角平分线定理,

$$\frac{BE}{EC}=\frac{AB}{AC}=\frac{c}{b},\qquad \frac{AG}{GC}=\frac{AB}{BC}=\frac{c}{a}.$$

因为 \(BC=a\), \(AC=b\),可得

$$EC=\frac{ab}{b+c},\qquad AG=\frac{bc}{a+c}.$$

\(ABC\) 与 \(AEC\) 在 \(BC\) 上有相同高,因此

$$\frac{[ABC]}{[AEC]}=\frac{BC}{EC}=\frac{b+c}{b}.$$

同理,\(AEC\) 与 \(AEG\) 在 \(AC\) 上有相同高,所以

$$\frac{[AEC]}{[AEG]}=\frac{AC}{AG}=\frac{a+c}{c}.$$

相乘就得到核心恒等式:

$$\frac{[ABC]}{[AEG]}=\frac{(a+b)(a+c)}{bc}.$$

于是问题等价于统计使得

$$k=\frac{(a+b)(a+c)}{bc}$$

为整数的三角形。

2. 为什么只会出现 \(k=2,3,4\)

把 \(k\) 改写为

$$k=\left(1+\frac{a}{b}\right)\left(1+\frac{a}{c}\right).$$

由于 \(a\le b\le c\),有

$$0<\frac{a}{c}\le \frac{a}{b}\le 1,$$

因此

$$1<k\le 4.$$

而 \(k\) 又必须是整数,所以只可能是

$$k\in\{2,3,4\}.$$

3. \(k=4\) 情形:恰好是等边三角形

$$\left(1+\frac{a}{b}\right)\left(1+\frac{a}{c}\right)=4,$$

由于两个因子都不超过 2,所以只能同时等于 2,从而必有

$$a=b=c.$$

因此这一部分的贡献就是

$$\left\lfloor\frac{P}{3}\right\rfloor.$$

4. \(k=2\) 情形:化为乘积方程

$$\frac{(a+b)(a+c)}{bc}=2$$

出发,可化为

$$(b-a)(c-a)=2a^2.$$

$$d_1=b-a,\qquad d_2=c-a,$$

$$d_1d_2=2a^2.$$

再设

$$g=\gcd(d_1,d_2),\qquad d_1=gu,\qquad d_2=gv,\qquad \gcd(u,v)=1.$$

由于 \(g\mid a\),写成 \(a=gh\),于是

$$uv=2h^2.$$

因为 \(u,v\) 互素且乘积是“2乘平方”,所以其中一个必须是平方,另一个必须是 \(2\) 倍平方。故只有两种规范形式:

$$u=x^2,\quad v=2y^2,$$

或者

$$u=2x^2,\quad v=y^2,$$

并且 \(\gcd(x,y)=1\)。

5. 两个 \(k=2\) 家族

家族 A。

$$d_1=gx^2,\qquad d_2=2gy^2.$$

$$a=gxy,\qquad b=gx(x+y),\qquad c=gy(x+2y),$$

周长为

$$p=g(x+y)(x+2y).$$

顺序关系和三角不等式化为

$$y<x\le \sqrt{2}\,y.$$

此外 \(x\) 必须是奇数。对每个原始参数对 \((x,y)\),允许的缩放数目为

$$\left\lfloor\frac{P}{(x+y)(x+2y)}\right\rfloor.$$

家族 B。

$$d_1=2gx^2,\qquad d_2=gy^2.$$

$$a=gxy,\qquad b=gx(2x+y),\qquad c=gy(x+y),$$

$$p=g(x+y)(2x+y).$$

参数范围变成

$$\sqrt{2}\,x\le y<2x,$$

并且 \(y\) 必须是奇数。此时贡献为

$$\left\lfloor\frac{P}{(x+y)(2x+y)}\right\rfloor.$$

6. \(k=2\) 的工作示例

最小的 \(k=2\) 例子来自家族 B。取

$$x=2,\qquad y=3,\qquad g=1,$$

便得到

$$a=6,\qquad b=14,\qquad c=15,$$

$$ (a,b,c)=(6,14,15),\qquad p=35. $$

直接检验:

$$\frac{(a+b)(a+c)}{bc}=\frac{20\cdot 21}{14\cdot 15}=2.$$

7. \(k=3\) 情形:另一条乘积方程

$$\frac{(a+b)(a+c)}{bc}=3$$

可推出

$$(2b-a)(2c-a)=3a^2.$$

$$u=2b-a,\qquad v=2c-a,$$

$$uv=3a^2.$$

写成

$$u=gs,\qquad v=gt,\qquad \gcd(s,t)=1,\qquad a=gh,$$

就有

$$st=3h^2.$$

因此互素的两个因子中,一个必须是平方,另一个必须是 3 倍平方:

$$s=x^2,\quad t=3y^2,$$

或者

$$s=3x^2,\quad t=y^2.$$

8. 两个 \(k=3\) 家族

家族 A。

$$u=gx^2,\qquad v=3gy^2.$$

$$a=gxy,\qquad b=\frac{gx(x+y)}{2},\qquad c=\frac{gy(x+3y)}{2},$$

并且

$$p=\frac{g(x+y)(x+3y)}{2}.$$

参数范围是

$$y<x\le \sqrt{3}\,y,$$

同时要求 \(x\not\equiv 0\pmod 3\)。

由于 \(b,c\) 带有除以 2,\(g\) 的奇偶性会影响边长是否仍为整数。若 \(x,y\) 都是奇数,则任意正整数 \(g\) 都可以;否则只能取偶数 \(g\)。设

$$B_A=(x+y)(x+3y),\qquad g_{\max}=\left\lfloor\frac{2P}{B_A}\right\rfloor,$$

则贡献是 \(g_{\max}\) 或 \(\lfloor g_{\max}/2\rfloor\)。

家族 B。

$$u=3gx^2,\qquad v=gy^2.$$

$$a=gxy,\qquad b=\frac{gx(3x+y)}{2},\qquad c=\frac{gy(x+y)}{2},$$

周长为

$$p=\frac{g(x+y)(3x+y)}{2}.$$

其范围条件是

$$\sqrt{3}\,x\le y<3x,$$

且 \(y\not\equiv 0\pmod 3\)。这里 \(g\) 的奇偶规则与家族 A 相同。

9. \(k=3\) 的工作示例

最小的 \(k=3\) 三角形是

$$ (4,5,6). $$

它来自家族 B,参数为

$$x=1,\qquad y=2,\qquad g=2.$$

于是

$$a=4,\qquad b=5,\qquad c=6,$$

而且

$$\frac{(a+b)(a+c)}{bc}=\frac{9\cdot 10}{5\cdot 6}=3.$$

10. 为什么不会重复计数

每个合法三角形都有唯一的整数比值 \(k\in\{2,3,4\}\)。\(k=4\) 只对应等边。对于 \(k=2\) 和 \(k=3\),在提出 gcd 并化到互素部分之后,平方自由因子 2 或 3 放在哪一侧是唯一确定的,这正对应 A/B 两个家族。随后缩放因子 \(g\) 也唯一。因此每个三角形只被生成一次。

11. 验证检查点

记 \(N(P)\) 为周长不超过 \(P\) 的合法三角形个数。代码把快速公式与暴力枚举在

$$P\in\{40,60,100,150,200,300\}$$

上逐一比较。这些结果为

$$N(40)=16,\quad N(60)=26,\quad N(100)=46,$$

$$N(150)=72,\quad N(200)=100,\quad N(300)=160.$$

代码如何工作

count_valid_triangles(P) 先加入等边部分 \(\lfloor P/3\rfloor\),再设置

$$\text{max\_var}=\lfloor\sqrt{P}\rfloor+2,$$

然后分别统计四个非平凡家族。每个计数器都遍历原始参数对 \((x,y)\),应用互素、奇偶与模 3 过滤,计算基础周长表达式,并累加允许的缩放因子 \(g\) 数量。

四个家族彼此独立,因此实现可以把它们分配给最多四个 pthread 线程。小范围验证则使用 brute_count

复杂度分析

\(x\) 和 \(y\) 的范围都只到 \(O(\sqrt{P})\),所以整体搜索相当于在 \(\sqrt{P}\) 上做二次遍历,也就是大约 \(O(P)\) 个候选参数对。每个候选只需要一个 gcd 和常数次整数运算。除少量线程上下文外,额外内存为常数级。

参考资料

  1. 题目页面: https://projecteuler.net/problem=257
  2. 角平分线定理: Wikipedia - Angle bisector theorem
  3. 不定方程: Wikipedia
  4. 互素整数: Wikipedia
  5. 上下取整函数: Wikipedia - Floor and ceiling functions

Краткое описание

Пусть \(a\le b\le c\) - целые стороны невырожденного треугольника \(ABC\). Его периметр равен

$$p=a+b+c.$$

Как и в условии, биссектрисы пересекают стороны в точках \(E,F,G\), и нас интересует отношение площадей

$$\frac{[ABC]}{[AEG]}.$$

Нужно посчитать все треугольники с целыми сторонами, удовлетворяющие

$$a+b+c\le P,$$

для которых это отношение является целым числом. Окончательный численный ответ для полного лимита Euler здесь сознательно не приводится.

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

1. Переход от геометрии к арифметической формуле

Решение не считает площади напрямую. Сначала оно выражает все через \(a,b,c\).

Пусть \(E\) - точка пересечения биссектрисы из \(A\) со стороной \(BC\), а \(G\) - точка пересечения биссектрисы из \(B\) со стороной \(AC\). По теореме о биссектрисе

$$\frac{BE}{EC}=\frac{AB}{AC}=\frac{c}{b},\qquad \frac{AG}{GC}=\frac{AB}{BC}=\frac{c}{a}.$$

Так как \(BC=a\) и \(AC=b\), получаем

$$EC=\frac{ab}{b+c},\qquad AG=\frac{bc}{a+c}.$$

Треугольники \(ABC\) и \(AEC\) имеют общую высоту к \(BC\), поэтому

$$\frac{[ABC]}{[AEC]}=\frac{BC}{EC}=\frac{b+c}{b}.$$

А треугольники \(AEC\) и \(AEG\) имеют общую высоту к \(AC\), значит

$$\frac{[AEC]}{[AEG]}=\frac{AC}{AG}=\frac{a+c}{c}.$$

Перемножая, получаем основную формулу:

$$\frac{[ABC]}{[AEG]}=\frac{(a+b)(a+c)}{bc}.$$

Итак, задача сводится к подсчету треугольников, для которых

$$k=\frac{(a+b)(a+c)}{bc}$$

является целым числом.

2. Почему возможны только \(k=2,3,4\)

Перепишем

$$k=\left(1+\frac{a}{b}\right)\left(1+\frac{a}{c}\right).$$

Из \(a\le b\le c\) следует

$$0<\frac{a}{c}\le \frac{a}{b}\le 1,$$

поэтому

$$1<k\le 4.$$

Так как \(k\) должно быть целым, остаются только

$$k\in\{2,3,4\}.$$

3. Случай \(k=4\): только равносторонние треугольники

Чтобы

$$\left(1+\frac{a}{b}\right)\left(1+\frac{a}{c}\right)=4,$$

оба множителя должны быть равны 2. Это возможно только при

$$a=b=c.$$

Следовательно, вклад этого случая равен

$$\left\lfloor\frac{P}{3}\right\rfloor.$$

4. Случай \(k=2\): произведение двух разностей

Из равенства

$$\frac{(a+b)(a+c)}{bc}=2$$

получаем

$$(b-a)(c-a)=2a^2.$$

Положим

$$d_1=b-a,\qquad d_2=c-a.$$

Тогда

$$d_1d_2=2a^2.$$

Пусть

$$g=\gcd(d_1,d_2),\qquad d_1=gu,\qquad d_2=gv,\qquad \gcd(u,v)=1.$$

Так как \(g\mid a\), пишем \(a=gh\), и тогда

$$uv=2h^2.$$

Поскольку \(u\) и \(v\) взаимно просты, один из множителей обязан быть квадратом, а другой - удвоенным квадратом. Отсюда две канонические формы:

$$u=x^2,\quad v=2y^2,$$

или

$$u=2x^2,\quad v=y^2,$$

где \(\gcd(x,y)=1\).

5. Два семейства для \(k=2\)

Семейство A. Пусть

$$d_1=gx^2,\qquad d_2=2gy^2.$$

Тогда

$$a=gxy,\qquad b=gx(x+y),\qquad c=gy(x+2y),$$

а периметр равен

$$p=g(x+y)(x+2y).$$

Условия порядка и неравенства треугольника дают

$$y<x\le \sqrt{2}\,y.$$

Кроме того, \(x\) должен быть нечетным. Число допустимых масштабов равно

$$\left\lfloor\frac{P}{(x+y)(x+2y)}\right\rfloor.$$

Семейство B. Пусть

$$d_1=2gx^2,\qquad d_2=gy^2.$$

Тогда

$$a=gxy,\qquad b=gx(2x+y),\qquad c=gy(x+y),$$

с периметром

$$p=g(x+y)(2x+y).$$

Здесь условия имеют вид

$$\sqrt{2}\,x\le y<2x,$$

и \(y\) должен быть нечетным. Вклад равен

$$\left\lfloor\frac{P}{(x+y)(2x+y)}\right\rfloor.$$

6. Пример для \(k=2\)

Наименьший треугольник с \(k=2\) возникает уже в семействе B. Возьмем

$$x=2,\qquad y=3,\qquad g=1.$$

Тогда

$$a=6,\qquad b=14,\qquad c=15,$$

то есть

$$ (a,b,c)=(6,14,15),\qquad p=35. $$

Проверка:

$$\frac{(a+b)(a+c)}{bc}=\frac{20\cdot 21}{14\cdot 15}=2.$$

7. Случай \(k=3\): вторая факторизация

Из

$$\frac{(a+b)(a+c)}{bc}=3$$

получаем

$$(2b-a)(2c-a)=3a^2.$$

Положим

$$u=2b-a,\qquad v=2c-a.$$

Тогда

$$uv=3a^2.$$

Снова пишем

$$u=gs,\qquad v=gt,\qquad \gcd(s,t)=1,\qquad a=gh,$$

и получаем

$$st=3h^2.$$

Значит, один множитель является квадратом, а другой - тремя квадратами:

$$s=x^2,\quad t=3y^2,$$

или

$$s=3x^2,\quad t=y^2.$$

8. Два семейства для \(k=3\)

Семейство A. Пусть

$$u=gx^2,\qquad v=3gy^2.$$

Тогда

$$a=gxy,\qquad b=\frac{gx(x+y)}{2},\qquad c=\frac{gy(x+3y)}{2},$$

а периметр

$$p=\frac{g(x+y)(x+3y)}{2}.$$

Ограничения таковы:

$$y<x\le \sqrt{3}\,y,$$

и \(x\not\equiv 0\pmod 3\).

Из-за деления на 2 в формулах для \(b\) и \(c\) важна четность \(g\). Если \(x\) и \(y\) оба нечетные, то подходит любое \(g\). Иначе подходят только четные \(g\).

Если

$$B_A=(x+y)(x+3y),\qquad g_{\max}=\left\lfloor\frac{2P}{B_A}\right\rfloor,$$

то вклад равен \(g_{\max}\) или \(\lfloor g_{\max}/2\rfloor\).

Семейство B. Пусть

$$u=3gx^2,\qquad v=gy^2.$$

Тогда

$$a=gxy,\qquad b=\frac{gx(3x+y)}{2},\qquad c=\frac{gy(x+y)}{2},$$

а периметр равен

$$p=\frac{g(x+y)(3x+y)}{2}.$$

Условия теперь

$$\sqrt{3}\,x\le y<3x,$$

и \(y\not\equiv 0\pmod 3\). Правило четности для \(g\) то же самое.

9. Пример для \(k=3\)

Наименьший треугольник с \(k=3\) - это

$$ (4,5,6). $$

Он получается из семейства B при

$$x=1,\qquad y=2,\qquad g=2.$$

Тогда

$$a=4,\qquad b=5,\qquad c=6,$$

и

$$\frac{(a+b)(a+c)}{bc}=\frac{9\cdot 10}{5\cdot 6}=3.$$

10. Почему двойного счета нет

У каждого допустимого треугольника есть единственное целое \(k\in\{2,3,4\}\). Случай \(k=4\) отделен полностью. В случаях \(k=2\) и \(k=3\) после вынесения gcd и перехода к взаимно простым частям квадратсвободный множитель 2 или 3 может лежать только в одной из двух сторон, и это ровно разбиение на A и B. После этого масштаб \(g\) тоже определяется однозначно. Поэтому каждый треугольник учитывается ровно один раз.

11. Контрольные значения

Пусть \(N(P)\) обозначает число допустимых треугольников с периметром не более \(P\). Код сравнивает быструю формулу с полным перебором для

$$P\in\{40,60,100,150,200,300\}.$$

Получаются значения

$$N(40)=16,\quad N(60)=26,\quad N(100)=46,$$

$$N(150)=72,\quad N(200)=100,\quad N(300)=160.$$

Как работает код

count_valid_triangles(P) начинает с равностороннего вклада \(\lfloor P/3\rfloor\), затем берет

$$\text{max\_var}=\lfloor\sqrt{P}\rfloor+2,$$

после чего суммирует четыре нетривиальных семейства. Каждая функция перебирает примитивные пары \((x,y)\), применяет условия взаимной простоты, четности и остатка по модулю 3, вычисляет базовый периметр и добавляет число допустимых масштабов \(g\).

Поскольку четыре семейства независимы, реализация может распределить их между четырьмя pthread-потоками. Для маленьких значений \(P\) правильность проверяет brute_count.

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

Параметры \(x\) и \(y\) ограничены величиной \(O(\sqrt{P})\), поэтому поиск квадратичен по \(\sqrt{P}\), то есть порядка \(O(P)\) кандидатных пар. Для каждой пары выполняется один gcd и константное число целочисленных операций. Дополнительная память постоянна, если не считать маленьких потоковых структур.

Ссылки

  1. Страница задачи: https://projecteuler.net/problem=257
  2. Теорема о биссектрисе: Wikipedia - Angle bisector theorem
  3. Диофантовы уравнения: Wikipedia
  4. Взаимно простые числа: Wikipedia
  5. Функции пола и потолка: Wikipedia - Floor and ceiling functions

ملخص المسألة

لتكن \(a\le b\le c\) أطوال أضلاع مثلث صحيح غير منعدم \(ABC\)، وليكن محيطه

$$p=a+b+c.$$

كما في نص المسألة، تقطع منصفات الزوايا الأضلاع في النقاط \(E,F,G\)، والنسبة التي نهتم بها هي

$$\frac{[ABC]}{[AEG]}.$$

المطلوب هو عد جميع المثلثات الصحيحة التي تحقق

$$a+b+c\le P$$

بحيث تكون هذه النسبة عددًا صحيحًا. أمّا الجواب النهائي للحد الكبير في Euler فمتروك هنا دون تصريح.

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

1. تحويل المسألة الهندسية إلى صيغة حسابية

الحل لا يعمل على المساحات مباشرة، بل يحولها أولًا إلى علاقة صريحة بين \(a,b,c\).

لتكن \(E\) نقطة تقاطع منصف الزاوية عند \(A\) مع \(BC\)، ولتكن \(G\) نقطة تقاطع منصف الزاوية عند \(B\) مع \(AC\). من نظرية منصف الزاوية نحصل على

$$\frac{BE}{EC}=\frac{AB}{AC}=\frac{c}{b},\qquad \frac{AG}{GC}=\frac{AB}{BC}=\frac{c}{a}.$$

وبما أن \(BC=a\) و \(AC=b\)، فإن

$$EC=\frac{ab}{b+c},\qquad AG=\frac{bc}{a+c}.$$

المثلثان \(ABC\) و \(AEC\) يشتركان في الارتفاع نفسه على \(BC\)، ولذلك

$$\frac{[ABC]}{[AEC]}=\frac{BC}{EC}=\frac{b+c}{b}.$$

وبالمثل فإن \(AEC\) و \(AEG\) يشتركان في الارتفاع نفسه على \(AC\)، ومن ثم

$$\frac{[AEC]}{[AEG]}=\frac{AC}{AG}=\frac{a+c}{c}.$$

وبضرب النسبتين نحصل على العلاقة المحورية:

$$\frac{[ABC]}{[AEG]}=\frac{(a+b)(a+c)}{bc}.$$

إذن تصبح المسألة هي عد المثلثات التي يكون فيها

$$k=\frac{(a+b)(a+c)}{bc}$$

عددًا صحيحًا.

2. لماذا لا تظهر إلا القيم \(k=2,3,4\)

نكتب

$$k=\left(1+\frac{a}{b}\right)\left(1+\frac{a}{c}\right).$$

وبسبب \(a\le b\le c\) فإن

$$0<\frac{a}{c}\le \frac{a}{b}\le 1,$$

ومن ثم

$$1<k\le 4.$$

ولأن \(k\) يجب أن يكون عددًا صحيحًا، فلا يبقى إلا

$$k\in\{2,3,4\}.$$

3. حالة \(k=4\): وهي المثلثات المتساوية الأضلاع فقط

لكي يتحقق

$$\left(1+\frac{a}{b}\right)\left(1+\frac{a}{c}\right)=4,$$

فلا بد أن يساوي كل عامل 2، لأن كل عامل لا يمكن أن يتجاوز 2. وهذا يجبرنا على

$$a=b=c.$$

لذلك يكون إسهام هذه العائلة ببساطة

$$\left\lfloor\frac{P}{3}\right\rfloor.$$

4. حالة \(k=2\): معادلة ضرب

من

$$\frac{(a+b)(a+c)}{bc}=2$$

نصل إلى

$$(b-a)(c-a)=2a^2.$$

لنعرّف

$$d_1=b-a,\qquad d_2=c-a.$$

عندها

$$d_1d_2=2a^2.$$

ولتكن

$$g=\gcd(d_1,d_2),\qquad d_1=gu,\qquad d_2=gv,\qquad \gcd(u,v)=1.$$

وبما أن \(g\mid a\)، نكتب \(a=gh\)، فنحصل على

$$uv=2h^2.$$

وبما أن \(u\) و \(v\) متباينان أوليًا، فلا بد أن يكون أحدهما مربعًا كاملًا والآخر ضعف مربع كامل. إذن توجد صورتان قانونيتان فقط:

$$u=x^2,\quad v=2y^2,$$

أو

$$u=2x^2,\quad v=y^2,$$

مع \(\gcd(x,y)=1\).

5. العائلتان في حالة \(k=2\)

العائلة A. نأخذ

$$d_1=gx^2,\qquad d_2=2gy^2.$$

فتكون

$$a=gxy,\qquad b=gx(x+y),\qquad c=gy(x+2y),$$

ويصبح المحيط

$$p=g(x+y)(x+2y).$$

وتتحول الشروط إلى

$$y<x\le \sqrt{2}\,y.$$

كما يجب أن يكون \(x\) فرديًا. وعدد معاملات القياس المسموح بها هو

$$\left\lfloor\frac{P}{(x+y)(x+2y)}\right\rfloor.$$

العائلة B. نأخذ

$$d_1=2gx^2,\qquad d_2=gy^2.$$

فتصبح

$$a=gxy,\qquad b=gx(2x+y),\qquad c=gy(x+y),$$

ومنه

$$p=g(x+y)(2x+y).$$

والشروط هنا هي

$$\sqrt{2}\,x\le y<2x,$$

مع ضرورة أن يكون \(y\) فرديًا. ويكون عدد معاملات القياس

$$\left\lfloor\frac{P}{(x+y)(2x+y)}\right\rfloor.$$

6. مثال عملي على \(k=2\)

أصغر مثلث من نوع \(k=2\) يظهر بالفعل في العائلة B. خذ

$$x=2,\qquad y=3,\qquad g=1.$$

فنحصل على

$$a=6,\qquad b=14,\qquad c=15,$$

أي

$$ (a,b,c)=(6,14,15),\qquad p=35. $$

والتحقق المباشر يعطي

$$\frac{(a+b)(a+c)}{bc}=\frac{20\cdot 21}{14\cdot 15}=2.$$

7. حالة \(k=3\): معادلة ضرب ثانية

من

$$\frac{(a+b)(a+c)}{bc}=3$$

نستنتج

$$(2b-a)(2c-a)=3a^2.$$

لنعرّف

$$u=2b-a,\qquad v=2c-a.$$

وعندها

$$uv=3a^2.$$

ثم نكتب

$$u=gs,\qquad v=gt,\qquad \gcd(s,t)=1,\qquad a=gh,$$

فنصل إلى

$$st=3h^2.$$

وهذا يعني أن أحد العاملين مربع كامل، والآخر ثلاثة أضعاف مربع كامل:

$$s=x^2,\quad t=3y^2,$$

أو

$$s=3x^2,\quad t=y^2.$$

8. العائلتان في حالة \(k=3\)

العائلة A. إذا أخذنا

$$u=gx^2,\qquad v=3gy^2,$$

فإن

$$a=gxy,\qquad b=\frac{gx(x+y)}{2},\qquad c=\frac{gy(x+3y)}{2},$$

ويكون المحيط

$$p=\frac{g(x+y)(x+3y)}{2}.$$

وتصبح الشروط

$$y<x\le \sqrt{3}\,y,$$

مع \(x\not\equiv 0\pmod 3\).

وبسبب القسمة على 2 في صيغتي \(b\) و \(c\)، فإن فردية أو زوجية \(g\) مهمة. إذا كان \(x\) و \(y\) فرديين معًا، فكل \(g\) يصلح. وإلا فلا تصلح إلا قيم \(g\) الزوجية.

إذا عرّفنا

$$B_A=(x+y)(x+3y),\qquad g_{\max}=\left\lfloor\frac{2P}{B_A}\right\rfloor,$$

فإن الإسهام يكون \(g_{\max}\) أو \(\lfloor g_{\max}/2\rfloor\).

العائلة B. وإذا أخذنا

$$u=3gx^2,\qquad v=gy^2,$$

فنحصل على

$$a=gxy,\qquad b=\frac{gx(3x+y)}{2},\qquad c=\frac{gy(x+y)}{2},$$

وبالتالي

$$p=\frac{g(x+y)(3x+y)}{2}.$$

والشروط الآن هي

$$\sqrt{3}\,x\le y<3x,$$

مع \(y\not\equiv 0\pmod 3\). وقاعدة الفردي/الزوجي الخاصة بـ \(g\) تبقى نفسها.

9. مثال عملي على \(k=3\)

أصغر مثلث من نوع \(k=3\) هو

$$ (4,5,6). $$

وهو يأتي من العائلة B عند

$$x=1,\qquad y=2,\qquad g=2.$$

فنجد

$$a=4,\qquad b=5,\qquad c=6,$$

وبالتالي

$$\frac{(a+b)(a+c)}{bc}=\frac{9\cdot 10}{5\cdot 6}=3.$$

10. لماذا لا يوجد عد مكرر

لكل مثلث صالح قيمة صحيحة وحيدة \(k\in\{2,3,4\}\). حالة \(k=4\) منفصلة تمامًا لأنها تعطي المثلثات المتساوية الأضلاع فقط. وفي حالتي \(k=2\) و \(k=3\)، بعد استخراج القاسم المشترك الأكبر وتقسيم الجزء المربع الحر، يتحدد بشكل فريد في أي عامل يظهر العدد 2 أو 3، وهذا هو بالضبط انقسام A/B. ثم يأتي \(g\) بوصفه معامل القياس الوحيد. لذلك يُولد كل مثلث مرة واحدة فقط.

11. نقاط التحقق

إذا رمزنا بعدد المثلثات الصالحة ذات المحيط حتى \(P\) بالرمز \(N(P)\)، فإن الكود يقارن الصيغة السريعة مع العد الشامل للقيم

$$P\in\{40,60,100,150,200,300\}.$$

وتكون النتائج

$$N(40)=16,\quad N(60)=26,\quad N(100)=46,$$

$$N(150)=72,\quad N(200)=100,\quad N(300)=160.$$

كيف يعمل الكود

تبدأ الدالة count_valid_triangles(P) بإضافة مساهمة المثلثات المتساوية الأضلاع \(\lfloor P/3\rfloor\)، ثم تضبط

$$\text{max\_var}=\lfloor\sqrt{P}\rfloor+2,$$

وبعد ذلك تجمع العائلات الأربع غير البديهية. كل دالة عد تمر على أزواج أولية \((x,y)\)، وتطبق شروط التباين الأولي والفردي/الزوجي وشرط modulo 3، ثم تحسب تعبير المحيط الأساسي وتضيف عدد معاملات القياس \(g\) المقبولة.

وبما أن العائلات الأربع مستقلة، فإن التنفيذ يستطيع توزيعها على ما يصل إلى أربعة خيوط pthread. أما للتحقق عند القيم الصغيرة فيستخدم brute_count.

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

المعاملان \(x\) و \(y\) لا يتجاوزان \(O(\sqrt{P})\)، ولذلك يكون البحث تربيعيًا بالنسبة إلى \(\sqrt{P}\)، أي ما يقارب \(O(P)\) من الأزواج المرشحة. وكل زوج يحتاج فقط إلى gcd واحد وبعض العمليات الصحيحة الثابتة. واستهلاك الذاكرة يبقى ثابتًا تقريبًا باستثناء سياقات الخيوط الصغيرة.

مراجع

  1. صفحة المسألة: https://projecteuler.net/problem=257
  2. نظرية منصف الزاوية: Wikipedia - Angle bisector theorem
  3. المعادلات الديوفانتية: Wikipedia
  4. الأعداد المتباينة أوليًا: Wikipedia
  5. دوال الأرضية والسقف: Wikipedia - Floor and ceiling functions