Problem Summary

For each integer \(k\), let \(M(k)\) be the smallest rectangle area that has exactly \(k\) manufacturable variants. A variant is an admissible factor pair \((x,y)\) with \(x\le y\), both sides manufacturable, and

$$10y\le 11x,$$

so the rectangle is within \(10\%\) of a square. The required answer is

$$\sum_{k=2}^{100} M(k).$$

The implementations encode the manufacturing rule through admissible side lengths: a positive integer side is manufacturable exactly when all of its prime factors belong to \(\{2,3,5,7,11,13,17,19,23\}\).

Mathematical Approach

Let

$$P=\{2,3,5,7,11,13,17,19,23\}$$

and define the manufacturable side set

$$\mathcal{S}=\left\{n\in \mathbb{Z}_{>0}: \text{every prime divisor of } n \text{ lies in } P\right\}.$$

For any area \(A\), define its admissible multiplicity by

$$r(A)=\#\left\{(x,y)\in \mathcal{S}^2 : x\le y,\ xy=A,\ 10y\le 11x\right\}.$$

Then

$$M(k)=\min\{A:r(A)=k\}.$$

Step 1: Characterize the manufacturable side lengths

The allowed rescalings only introduce prime factors at most \(23\). Conversely, every prime in \(P\) is itself an allowed multiplier, so repeated valid rescalings can build any positive integer whose prime divisors all lie in \(P\).

Therefore the manufacturable side lengths are exactly the \(23\)-smooth positive integers. This converts the original manufacturing constraint into a clean number-theoretic set \(\mathcal{S}\).

Step 2: Turn rectangle variants into near-square factor pairs

After ordering the sides so that \(x\le y\), every rectangle variant corresponds to one factorization \(A=xy\) with

$$x\le y,\qquad 10y\le 11x.$$

The inequality forces the two factors to lie close to \(\sqrt{A}\), and the condition \(x\le y\) removes the reflected duplicate \((y,x)\).

Because products of \(23\)-smooth numbers are still \(23\)-smooth, every admissible area is itself \(23\)-smooth. Also, every divisor of a \(23\)-smooth number is again \(23\)-smooth, so once an area \(A\) is fixed, counting manufacturable variants is the same as counting admissible divisor pairs of \(A\) near its square root.

Step 3: Define the multiplicity function and the search target

The function \(r(A)\) records how many admissible near-square factorizations produce the same area. Different areas can have the same multiplicity, and \(M(k)\) selects the smallest area with multiplicity exactly \(k\).

So the whole problem becomes

$$\sum_{k=2}^{100} M(k).$$

This viewpoint separates the task into two layers: enumerate all relevant side lengths, then aggregate areas by the number of admissible factor pairs that generate them.

Step 4: Why the expanding side cap is correct

Suppose we only enumerate side lengths up to some cap \(L\). Let \(r_L(A)\) be the same count as \(r(A)\), but restricted to pairs with \(x,y\le L\). As \(L\) grows, the set of visible pairs only increases, so \(r_L(A)\) is monotone.

Now consider any admissible pair with area \(A\). Since \(x\le y\) and \(xy=A\), we have \(x\le \sqrt{A}\le y\). Combining this with \(10y\le 11x\) gives

$$y\le \frac{11}{10}x\le \frac{11}{10}\sqrt{A}.$$

Hence every admissible pair for area \(A\) is guaranteed to be visible once

$$L\ge \left\lceil \frac{11}{10}\left\lceil \sqrt{A}\right\rceil \right\rceil.$$

If all needed values \(M(2),\dots,M(100)\) have already been found and this inequality also holds for

$$A=\max_{2\le k\le 100} M(k),$$

then no unseen pair can alter any relevant minimum, so the search is finished.

Step 5: Worked Example Using the Checkpoint \(M(3)=889200\)

The implementations verify the checkpoint

$$M(3)=889200.$$

For this area, the admissible factor pairs are

$$ (900,988),\qquad (912,975),\qquad (936,950). $$

Each pair satisfies \(x\le y\), each product is \(889200\), and each ratio \(y/x\) is below \(1.1\). Every side is also \(23\)-smooth:

$$\begin{aligned} 900&=2^2\cdot 3^2\cdot 5^2, & 988&=2^2\cdot 13\cdot 19,\\ 912&=2^4\cdot 3\cdot 19, & 975&=3\cdot 5^2\cdot 13,\\ 936&=2^3\cdot 3^2\cdot 13, & 950&=2\cdot 5^2\cdot 19. \end{aligned}$$

Therefore \(r(889200)=3\), and this area is the first one with multiplicity \(3\).

How the Code Works

The C++, Python, and Java implementations start from a moderate side cap and recursively generate every \(23\)-smooth side length up to that cap. The list is then sorted and deduplicated so each manufacturable side is processed once.

Next, the implementation scans the sorted side list with \(x\le y\). For each shorter side \(x\), it only considers longer sides up to \(\left\lfloor \frac{11x}{10}\right\rfloor\), because larger values would violate the near-square rule. Each admissible pair contributes one count to its area \(A=xy\). After all pairs are processed, the smallest area for each multiplicity \(k\in[2,100]\) is extracted from the area-count table.

If some \(M(k)\) is still missing, the side cap is multiplied by \(10\) and the process repeats. Once every \(M(k)\) from \(2\) through \(100\) has appeared, the implementation checks the coverage bound

$$L\ge \left\lceil \frac{11}{10}\left\lceil \sqrt{\max_k M(k)}\right\rceil \right\rceil$$

to prove that no admissible pair for any relevant area lies beyond the current cap. At that point the final sum is returned.

Complexity Analysis

Let \(s(L)\) be the number of \(23\)-smooth integers up to the final cap \(L\). Generating the smooth numbers is output-sensitive; after sorting and deduplication it costs \(O(s(L)\log s(L))\) time and \(O(s(L))\) memory.

The pair scan is worst-case \(O(s(L)^2)\), although the constraint \(10y\le 11x\) keeps only a narrow band near the diagonal and makes the practical workload much smaller. The area-count table uses linear memory in the number of distinct admissible areas encountered. Because the cap grows geometrically, the last successful round dominates the total runtime.

Footnotes and References

  1. Problem page: https://projecteuler.net/problem=563
  2. Smooth numbers: Wikipedia — Smooth number
  3. Divisor function and factor pairs: Wikipedia — Divisor function
  4. Prime factorization: Wikipedia — Integer factorization
  5. Geometric mean and the square-root bound: Wikipedia — Geometric mean

Problemzusammenfassung

Für jede ganze Zahl \(k\) sei \(M(k)\) die kleinste Rechtecksfläche mit genau \(k\) herstellbaren Varianten. Eine Variante ist ein zulässiges Faktorenpaar \((x,y)\) mit \(x\le y\), herstellbaren Seitenlängen und

$$10y\le 11x,$$

also einem Rechteck, das höchstens \(10\%\) von einem Quadrat abweicht. Gesucht ist

$$\sum_{k=2}^{100} M(k).$$

Die Implementierungen kodieren die Herstellbarkeit über die Seitenlängen: Eine positive ganze Zahl ist genau dann zulässig, wenn alle ihre Primfaktoren in \(\{2,3,5,7,11,13,17,19,23\}\) liegen.

Mathematischer Ansatz

Setze

$$P=\{2,3,5,7,11,13,17,19,23\}$$

und definiere die Menge herstellbarer Seiten durch

$$\mathcal{S}=\left\{n\in \mathbb{Z}_{>0}: \text{jeder Primteiler von } n \text{ liegt in } P\right\}.$$

Für eine Fläche \(A\) definieren wir ihre zulässige Vielfachheit als

$$r(A)=\#\left\{(x,y)\in \mathcal{S}^2 : x\le y,\ xy=A,\ 10y\le 11x\right\}.$$

Dann gilt

$$M(k)=\min\{A:r(A)=k\}.$$

Schritt 1: Herstellbare Seitenlängen charakterisieren

Die erlaubten Skalierungen können nur Primfaktoren bis \(23\) in eine Seitenlänge einführen. Umgekehrt ist jede Primzahl aus \(P\) selbst als gültiger Multiplikator verfügbar, daher lassen sich durch wiederholte zulässige Skalierungen alle positiven ganzen Zahlen aufbauen, deren Primteiler nur aus \(P\) stammen.

Damit sind die herstellbaren Seiten genau die \(23\)-glatten positiven ganzen Zahlen. So wird die ursprüngliche Fertigungsbedingung zu einer sauberen zahlentheoretischen Menge \(\mathcal{S}\).

Schritt 2: Rechteckvarianten als beinahe quadratische Faktorenpaare

Nachdem die Seiten so geordnet sind, dass \(x\le y\) gilt, entspricht jede Rechteckvariante einer Faktorisierung \(A=xy\) mit

$$x\le y,\qquad 10y\le 11x.$$

Diese Ungleichung zwingt beide Faktoren in die Nähe von \(\sqrt{A}\), und \(x\le y\) entfernt das gespiegelte Doppel \((y,x)\).

Da Produkte \(23\)-glatter Zahlen wieder \(23\)-glatt sind, ist jede zulässige Fläche selbst \(23\)-glatt. Außerdem ist jeder Teiler einer \(23\)-glatten Zahl wieder \(23\)-glatt. Hat man also eine Fläche \(A\) fixiert, dann ist das Zählen herstellbarer Varianten gleichbedeutend mit dem Zählen zulässiger Teilerpaare von \(A\) in der Nähe der Quadratwurzel.

Schritt 3: Vielfachheitsfunktion und Suchziel definieren

Die Funktion \(r(A)\) zählt, wie viele zulässige nahezu quadratische Faktorisierungen dieselbe Fläche erzeugen. Verschiedene Flächen können dieselbe Vielfachheit besitzen, und \(M(k)\) wählt die kleinste Fläche mit exakt \(k\) Varianten aus.

Damit lautet das Gesamtproblem

$$\sum_{k=2}^{100} M(k).$$

Diese Sicht trennt die Aufgabe in zwei Ebenen: erst alle relevanten Seitenlängen erzeugen, dann die Flächen nach der Anzahl ihrer zulässigen Faktorenpaare gruppieren.

Schritt 4: Warum das wachsende Seitenlimit korrekt ist

Angenommen, wir erzeugen nur Seitenlängen bis zu einer Grenze \(L\). Bezeichne mit \(r_L(A)\) dieselbe Anzahl wie \(r(A)\), aber nur mit Paaren \(x,y\le L\). Wenn \(L\) wächst, kann die sichtbare Menge von Paaren nur größer werden; \(r_L(A)\) ist also monoton.

Betrachte nun ein beliebiges zulässiges Paar mit Fläche \(A\). Aus \(x\le y\) und \(xy=A\) folgt \(x\le \sqrt{A}\le y\). Zusammen mit \(10y\le 11x\) erhält man

$$y\le \frac{11}{10}x\le \frac{11}{10}\sqrt{A}.$$

Somit ist jedes zulässige Paar zur Fläche \(A\) sicher sichtbar, sobald

$$L\ge \left\lceil \frac{11}{10}\left\lceil \sqrt{A}\right\rceil \right\rceil.$$

Wenn alle benötigten Werte \(M(2),\dots,M(100)\) bereits gefunden wurden und diese Ungleichung zusätzlich für

$$A=\max_{2\le k\le 100} M(k)$$

gilt, dann kann kein unsichtbares Paar mehr ein relevantes Minimum verändern.

Schritt 5: Durchgerechnetes Beispiel mit dem Kontrollwert \(M(3)=889200\)

Die Implementierungen prüfen den Kontrollwert

$$M(3)=889200.$$

Für diese Fläche sind die zulässigen Faktorenpaare

$$ (900,988),\qquad (912,975),\qquad (936,950). $$

Jedes Paar erfüllt \(x\le y\), jedes Produkt ist \(889200\), und jedes Verhältnis \(y/x\) bleibt unter \(1.1\). Außerdem sind alle Seiten \(23\)-glatt:

$$\begin{aligned} 900&=2^2\cdot 3^2\cdot 5^2, & 988&=2^2\cdot 13\cdot 19,\\ 912&=2^4\cdot 3\cdot 19, & 975&=3\cdot 5^2\cdot 13,\\ 936&=2^3\cdot 3^2\cdot 13, & 950&=2\cdot 5^2\cdot 19. \end{aligned}$$

Also ist \(r(889200)=3\), und dies ist die erste Fläche mit Vielfachheit \(3\).

Wie der Code arbeitet

Die C++-, Python- und Java-Implementierungen beginnen mit einer moderaten Seitenobergrenze und erzeugen rekursiv alle \(23\)-glatten Seitenlängen bis zu dieser Grenze. Anschließend wird die Liste sortiert und dedupliziert, sodass jede herstellbare Seitenlänge genau einmal vorkommt.

Danach wird die sortierte Liste mit \(x\le y\) durchsucht. Für jede kürzere Seite \(x\) werden nur längere Seiten bis \(\left\lfloor \frac{11x}{10}\right\rfloor\) betrachtet, weil größere Werte die Beinahe-Quadrat-Bedingung verletzen würden. Jedes zulässige Paar erhöht den Zähler seiner Fläche \(A=xy\). Nach dem vollständigen Durchlauf wird aus der Flächen-Tabelle die kleinste Fläche für jede Vielfachheit \(k\in[2,100]\) entnommen.

Fehlt noch ein Wert \(M(k)\), wird die Seitenobergrenze mit \(10\) multipliziert und der gesamte Vorgang wiederholt. Sobald alle \(M(k)\) von \(2\) bis \(100\) vorhanden sind, prüft die Implementierung noch die Schranke

$$L\ge \left\lceil \frac{11}{10}\left\lceil \sqrt{\max_k M(k)}\right\rceil \right\rceil$$

und beweist damit, dass jenseits der aktuellen Grenze kein zulässiges Paar mehr liegt, das irgendein relevantes Minimum verändern könnte. Dann wird die Endsumme ausgegeben.

Komplexitätsanalyse

Sei \(s(L)\) die Anzahl der \(23\)-glatten ganzen Zahlen bis zur endgültigen Grenze \(L\). Das Erzeugen dieser Zahlen ist ausgabeempfindlich; nach dem Sortieren und Entfernen von Duplikaten kostet es \(O(s(L)\log s(L))\) Zeit und \(O(s(L))\) Speicher.

Das Durchmustern der Paare ist im Worst Case \(O(s(L)^2)\), wobei die Bedingung \(10y\le 11x\) nur ein schmales Band nahe der Diagonale zulässt und die praktische Arbeit stark reduziert. Die Flächen-Tabelle benötigt linearen Speicher in der Anzahl der verschiedenen zulässigen Flächen. Da die Grenze geometrisch wächst, dominiert die letzte erfolgreiche Runde die Gesamtlaufzeit.

Fußnoten und Quellen

  1. Problemseite: https://projecteuler.net/problem=563
  2. Glatte Zahlen: Wikipedia — Smooth number
  3. Teilerfunktion und Faktorenpaare: Wikipedia — Divisor function
  4. Primfaktorzerlegung: Wikipedia — Integer factorization
  5. Geometrisches Mittel und Quadratwurzel-Schranke: Wikipedia — Geometric mean

Problem Özeti

Her tamsayı \(k\) için \(M(k)\), tam olarak \(k\) üretilebilir varyanta sahip en küçük dikdörtgen alanı olsun. Bir varyant, \(x\le y\) koşulunu sağlayan, iki kenarı da üretilebilir olan ve

$$10y\le 11x$$

eşitsizliğini sağlayan bir \((x,y)\) çarpan çiftidir; yani dikdörtgen kareden en fazla \(10\%\) sapar. İstenen sonuç

$$\sum_{k=2}^{100} M(k).$$

Uygulamalar üretilebilirliği kenar uzunlukları üzerinden kodlar: Bir pozitif tamsayı kenar, ancak ve ancak bütün asal çarpanları \(\{2,3,5,7,11,13,17,19,23\}\) kümesinden geliyorsa geçerlidir.

Matematiksel Yaklaşım

Şunu tanımlayalım:

$$P=\{2,3,5,7,11,13,17,19,23\}$$

ve üretilebilir kenar kümesini

$$\mathcal{S}=\left\{n\in \mathbb{Z}_{>0}: n \text{ sayısının her asal böleni } P \text{ içindedir}\right\}$$

olarak yazalım. Her alan \(A\) için uygun çokluğu

$$r(A)=\#\left\{(x,y)\in \mathcal{S}^2 : x\le y,\ xy=A,\ 10y\le 11x\right\}$$

şeklinde tanımlayalım. O zaman

$$M(k)=\min\{A:r(A)=k\}.$$

Adım 1: Üretilebilir kenar uzunluklarını karakterize et

İzin verilen ölçeklendirmeler bir kenara yalnızca \(23\)'ten küçük ya da eşit asal çarpanlar ekleyebilir. Ters yönde, \(P\) içindeki her asal sayı başlı başına geçerli bir çarpandır; dolayısıyla geçerli ölçeklendirmeler tekrarlandığında asal bölenleri yalnızca \(P\)'den gelen her pozitif tamsayı elde edilebilir.

Böylece üretilebilir kenarlar tam olarak \(23\)-smooth pozitif tamsayılardır. Bu gözlem, üretim kuralını temiz bir sayı kuramı kümesi olan \(\mathcal{S}\)'ye dönüştürür.

Adım 2: Dikdörtgen varyantlarını kareye yakın çarpan çiftlerine çevir

Kenarları \(x\le y\) olacak şekilde sıraladıktan sonra her varyant,

$$x\le y,\qquad 10y\le 11x$$

koşullarını sağlayan bir \(A=xy\) çarpanlaşmasına karşılık gelir. Bu eşitsizlik iki çarpanı \(\sqrt{A}\) çevresine sıkıştırır; \(x\le y\) koşulu da simetrik kopya olan \((y,x)\)'i ortadan kaldırır.

\(23\)-smooth sayıların çarpımı yine \(23\)-smooth olduğundan, her uygun alanın kendisi de \(23\)-smooth'tur. Ayrıca \(23\)-smooth bir sayının her böleni yine \(23\)-smooth olduğundan, bir \(A\) alanı sabitlendiğinde üretilebilir varyantları saymak ile \(A\)'nın kareköküne yakın uygun bölen çiftlerini saymak aynı şey olur.

Adım 3: Çokluk fonksiyonunu ve hedefi tanımla

\(r(A)\) fonksiyonu, aynı alanı veren uygun kareye-yakın çarpanlaşmaların sayısını tutar. Farklı alanlar aynı çokluğa sahip olabilir; \(M(k)\) ise çokluğu tam olarak \(k\) olan en küçük alanı seçer.

Dolayısıyla tüm problem

$$\sum_{k=2}^{100} M(k)$$

hesabına indirgenir. Böylece görev iki katmana ayrılır: önce ilgili bütün kenar uzunluklarını üretmek, sonra alanları kendilerini üreten uygun çarpan çiftlerinin sayısına göre gruplamak.

Adım 4: Büyüyen kenar sınırının neden doğru olduğu

Yalnızca \(L\) sınırına kadar olan kenarları ürettiğimizi varsayalım. \(r_L(A)\), \(r(A)\) ile aynı sayımı yapsın ama yalnızca \(x,y\le L\) olan çiftleri saysın. \(L\) büyüdükçe görülebilen çift kümesi sadece genişler; yani \(r_L(A)\) monotondur.

Şimdi alanı \(A\) olan herhangi bir uygun çifti düşünelim. \(x\le y\) ve \(xy=A\) olduğundan \(x\le \sqrt{A}\le y\) olur. Bunu \(10y\le 11x\) ile birleştirince

$$y\le \frac{11}{10}x\le \frac{11}{10}\sqrt{A}$$

elde edilir. O halde alanı \(A\) olan her uygun çift, şu koşul sağlandığında mutlaka görünür olur:

$$L\ge \left\lceil \frac{11}{10}\left\lceil \sqrt{A}\right\rceil \right\rceil.$$

Eğer gerekli bütün \(M(2),\dots,M(100)\) değerleri zaten bulunmuşsa ve bu eşitsizlik ayrıca

$$A=\max_{2\le k\le 100} M(k)$$

için de geçerliyse, artık görünmeyen hiçbir çift ilgili minimumlardan birini değiştiremez.

Adım 5: Kontrol değeri \(M(3)=889200\) ile çözümlü örnek

Uygulamalar şu kontrol değerini doğrular:

$$M(3)=889200.$$

Bu alan için uygun çarpan çiftleri şunlardır:

$$ (900,988),\qquad (912,975),\qquad (936,950). $$

Her çift \(x\le y\) koşulunu sağlar, her birinin çarpımı \(889200\)'dür ve her \(y/x\) oranı \(1.1\)'den küçüktür. Ayrıca bütün kenarlar \(23\)-smooth'tur:

$$\begin{aligned} 900&=2^2\cdot 3^2\cdot 5^2, & 988&=2^2\cdot 13\cdot 19,\\ 912&=2^4\cdot 3\cdot 19, & 975&=3\cdot 5^2\cdot 13,\\ 936&=2^3\cdot 3^2\cdot 13, & 950&=2\cdot 5^2\cdot 19. \end{aligned}$$

Dolayısıyla \(r(889200)=3\) olur ve bu, çokluğu \(3\) olan ilk alandır.

Kod Nasıl Çalışır

C++, Python ve Java uygulamaları önce orta büyüklükte bir kenar sınırı seçer ve bu sınıra kadar bütün \(23\)-smooth kenar uzunluklarını özyinelemeli olarak üretir. Daha sonra liste sıralanır ve tekrarlar atılır; böylece her üretilebilir kenar yalnızca bir kez işlenir.

Sonra sıralı liste \(x\le y\) olacak biçimde taranır. Her kısa kenar \(x\) için yalnızca \(\left\lfloor \frac{11x}{10}\right\rfloor\) değerine kadar olan uzun kenarlar incelenir; çünkü daha büyük değerler kareye-yakın koşulunu bozar. Her uygun çift, alanı \(A=xy\) için sayacı bir artırır. Bütün çiftler tamamlandığında, alan-sayım tablosundan \(k\in[2,100]\) aralığındaki her çokluk için en küçük alan çekilir.

Eğer bazı \(M(k)\) değerleri hâlâ eksikse, kenar sınırı \(10\) ile çarpılır ve süreç tekrar edilir. \(2\) ile \(100\) arasındaki tüm \(M(k)\) değerleri göründüğünde uygulama şu kapsama eşitsizliğini kontrol eder:

$$L\ge \left\lceil \frac{11}{10}\left\lceil \sqrt{\max_k M(k)}\right\rceil \right\rceil$$

Bu kontrol, ilgili hiçbir alan için görünmeyen uygun çift kalmadığını kanıtlar. Böylece son toplam döndürülür.

Karmaşıklık Analizi

Son sınır \(L\) için \(s(L)\), \(L\)'ye kadar olan \(23\)-smooth tamsayı sayısı olsun. Bu sayıların üretilmesi çıktı-duyarlıdır; sıralama ve tekilleştirme sonrası zaman maliyeti \(O(s(L)\log s(L))\), bellek maliyeti \(O(s(L))\) olur.

Çift taraması en kötü durumda \(O(s(L)^2)\) düzeyindedir; ancak \(10y\le 11x\) kısıtı yalnızca köşegen çevresindeki dar bir bandı açık bıraktığı için pratikte iş yükü çok daha düşüktür. Alan-sayım tablosu, karşılaşılan farklı uygun alan sayısı kadar doğrusal bellek kullanır. Sınır geometrik olarak büyüdüğü için toplam süreyi son başarılı tur belirler.

Dipnotlar ve Kaynakça

  1. Problem sayfası: https://projecteuler.net/problem=563
  2. Smooth sayılar: Wikipedia — Smooth number
  3. Bölen fonksiyonu ve çarpan çiftleri: Wikipedia — Divisor function
  4. Asal çarpanlara ayırma: Wikipedia — Integer factorization
  5. Geometrik ortalama ve karekök sınırı: Wikipedia — Geometric mean

Resumen del Problema

Para cada entero \(k\), sea \(M(k)\) el área mínima de un rectángulo con exactamente \(k\) variantes fabricables. Una variante es un par de factores admisible \((x,y)\) con \(x\le y\), ambos lados fabricables y

$$10y\le 11x,$$

de modo que el rectángulo está a lo sumo un \(10\%\) alejado de un cuadrado. El valor pedido es

$$\sum_{k=2}^{100} M(k).$$

Las implementaciones codifican la fabricabilidad por medio de las longitudes de los lados: un lado entero positivo es válido exactamente cuando todos sus factores primos pertenecen a \(\{2,3,5,7,11,13,17,19,23\}\).

Enfoque Matemático

Sea

$$P=\{2,3,5,7,11,13,17,19,23\}$$

y definamos el conjunto de lados fabricables por

$$\mathcal{S}=\left\{n\in \mathbb{Z}_{>0}: \text{todo divisor primo de } n \text{ pertenece a } P\right\}.$$

Para cualquier área \(A\), definimos su multiplicidad admisible como

$$r(A)=\#\left\{(x,y)\in \mathcal{S}^2 : x\le y,\ xy=A,\ 10y\le 11x\right\}.$$

Entonces

$$M(k)=\min\{A:r(A)=k\}.$$

Paso 1: Caracterizar las longitudes de lado fabricables

Los reescalados permitidos solo pueden introducir factores primos de valor a lo sumo \(23\). En sentido inverso, cada primo de \(P\) es por sí mismo un multiplicador permitido, así que repitiendo reescalados válidos se puede construir cualquier entero positivo cuyos divisores primos estén todos en \(P\).

Por tanto, los lados fabricables son exactamente los enteros positivos \(23\)-suaves. Esto transforma la restricción de fabricación en un conjunto puramente aritmético \(\mathcal{S}\).

Paso 2: Convertir las variantes en pares de factores casi cuadrados

Una vez ordenados los lados como \(x\le y\), cada variante del rectángulo corresponde a una factorización \(A=xy\) que satisface

$$x\le y,\qquad 10y\le 11x.$$

La desigualdad obliga a que los dos factores queden cerca de \(\sqrt{A}\), y la condición \(x\le y\) elimina el duplicado simétrico \((y,x)\).

Como el producto de números \(23\)-suaves sigue siendo \(23\)-suave, toda área admisible también lo es. Además, todo divisor de un número \(23\)-suave vuelve a ser \(23\)-suave. Así, una vez fijada un área \(A\), contar variantes fabricables equivale a contar los pares de divisores admisibles de \(A\) cercanos a su raíz cuadrada.

Paso 3: Definir la multiplicidad y el objetivo de búsqueda

La función \(r(A)\) cuenta cuántas factorizaciones admisibles y casi cuadradas producen la misma área. Distintas áreas pueden compartir la misma multiplicidad, y \(M(k)\) selecciona la menor área cuya multiplicidad es exactamente \(k\).

Por eso, el problema completo se reduce a

$$\sum_{k=2}^{100} M(k).$$

Esta reformulación separa el trabajo en dos fases: enumerar todos los lados relevantes y luego agrupar las áreas según el número de pares de factores admisibles que las generan.

Paso 4: Por qué es correcto ampliar el límite de lados

Supongamos que solo enumeramos lados hasta un tope \(L\). Sea \(r_L(A)\) el mismo conteo que \(r(A)\), pero restringido a pares con \(x,y\le L\). Cuando \(L\) aumenta, el conjunto de pares visibles solo puede crecer, así que \(r_L(A)\) es monótona.

Ahora tomemos cualquier par admisible de área \(A\). Como \(x\le y\) y \(xy=A\), se tiene \(x\le \sqrt{A}\le y\). Combinando esto con \(10y\le 11x\), obtenemos

$$y\le \frac{11}{10}x\le \frac{11}{10}\sqrt{A}.$$

Por consiguiente, todos los pares admisibles del área \(A\) están garantizados dentro del tope una vez que

$$L\ge \left\lceil \frac{11}{10}\left\lceil \sqrt{A}\right\rceil \right\rceil.$$

Si ya se han encontrado todos los valores \(M(2),\dots,M(100)\) y esta desigualdad también vale para

$$A=\max_{2\le k\le 100} M(k),$$

entonces ningún par todavía invisible puede modificar alguno de los mínimos relevantes.

Paso 5: Ejemplo trabajado con el control \(M(3)=889200\)

Las implementaciones verifican el control

$$M(3)=889200.$$

Para esa área, los pares de factores admisibles son

$$ (900,988),\qquad (912,975),\qquad (936,950). $$

Cada par satisface \(x\le y\), cada producto es \(889200\), y cada cociente \(y/x\) es menor que \(1.1\). Además, todos los lados son \(23\)-suaves:

$$\begin{aligned} 900&=2^2\cdot 3^2\cdot 5^2, & 988&=2^2\cdot 13\cdot 19,\\ 912&=2^4\cdot 3\cdot 19, & 975&=3\cdot 5^2\cdot 13,\\ 936&=2^3\cdot 3^2\cdot 13, & 950&=2\cdot 5^2\cdot 19. \end{aligned}$$

Por lo tanto, \(r(889200)=3\), y esa es la primera área con multiplicidad \(3\).

Cómo Funciona el Código

Las implementaciones en C++, Python y Java empiezan con un tope moderado para los lados y generan recursivamente todas las longitudes \(23\)-suaves hasta ese tope. Después, la lista se ordena y se eliminan duplicados para procesar cada lado fabricable una sola vez.

A continuación, la lista ordenada se recorre con \(x\le y\). Para cada lado corto \(x\), solo se consideran lados largos hasta \(\left\lfloor \frac{11x}{10}\right\rfloor\), porque cualquier valor mayor violaría la condición de proximidad al cuadrado. Cada par admisible incrementa el contador de su área \(A=xy\). Tras procesar todos los pares, se extrae de la tabla de áreas la menor área para cada multiplicidad \(k\in[2,100]\).

Si todavía falta algún \(M(k)\), el tope de los lados se multiplica por \(10\) y todo el proceso se repite. Cuando ya han aparecido todos los \(M(k)\) entre \(2\) y \(100\), la implementación comprueba además la cota

$$L\ge \left\lceil \frac{11}{10}\left\lceil \sqrt{\max_k M(k)}\right\rceil \right\rceil$$

para demostrar que no existe ningún par admisible relevante fuera del tope actual. En ese momento devuelve la suma final.

Análisis de Complejidad

Sea \(s(L)\) el número de enteros \(23\)-suaves hasta el tope final \(L\). La generación de estos números es sensible al tamaño de la salida; después de ordenar y eliminar duplicados cuesta \(O(s(L)\log s(L))\) tiempo y \(O(s(L))\) memoria.

El barrido de pares es \(O(s(L)^2)\) en el peor caso, aunque la restricción \(10y\le 11x\) deja solo una banda estrecha cerca de la diagonal y reduce mucho el trabajo real. La tabla de conteo de áreas usa memoria lineal en el número de áreas admisibles distintas que aparecen. Como el tope crece geométricamente, la última ronda exitosa domina el tiempo total.

Notas y Referencias

  1. Página del problema: https://projecteuler.net/problem=563
  2. Números suaves: Wikipedia — Smooth number
  3. Función divisor y pares de factores: Wikipedia — Divisor function
  4. Factorización entera: Wikipedia — Integer factorization
  5. Media geométrica y la cota de la raíz cuadrada: Wikipedia — Geometric mean

问题概述

对每个整数 \(k\),记 \(M(k)\) 为“恰好有 \(k\) 个可制造变体”的最小矩形面积。这里一个变体就是一个满足 \(x\le y\) 的可行因子对 \((x,y)\),它的两条边都必须可制造,并且满足

$$10y\le 11x,$$

也就是长边最多只比短边大 \(10\%\)。题目要求计算

$$\sum_{k=2}^{100} M(k).$$

这些实现把“可制造”转写成整数条件:一个正整数边长是可制造的,当且仅当它的所有素因子都属于 \(\{2,3,5,7,11,13,17,19,23\}\)。

数学方法

$$P=\{2,3,5,7,11,13,17,19,23\}$$

并定义可制造边长集合

$$\mathcal{S}=\left\{n\in \mathbb{Z}_{>0}: n \text{ 的每个素因子都属于 } P\right\}.$$

对任意面积 \(A\),定义它的可行重数为

$$r(A)=\#\left\{(x,y)\in \mathcal{S}^2 : x\le y,\ xy=A,\ 10y\le 11x\right\}.$$

于是

$$M(k)=\min\{A:r(A)=k\}.$$

步骤 1:先刻画哪些边长是可制造的

允许的放大操作只能给边长引入不超过 \(23\) 的素因子。反过来,\(P\) 中的每个素数本身就是允许的乘子,因此只要不断应用这些合法放大,就能得到所有素因子都来自 \(P\) 的正整数。

所以,可制造边长恰好就是所有 \(23\)-smooth 正整数。这样一来,原来的制造规则就被完全转化成了一个清晰的数论集合 \(\mathcal{S}\)。

步骤 2:把矩形变体转化为“接近正方形”的因子对

将两条边按 \(x\le y\) 排序后,每一个矩形变体都对应于一个分解 \(A=xy\),并满足

$$x\le y,\qquad 10y\le 11x.$$

这个不等式说明两条边必须靠近 \(\sqrt{A}\),而 \(x\le y\) 则去掉了镜像重复的 \((y,x)\)。

因为 \(23\)-smooth 数的乘积仍然是 \(23\)-smooth,所以每个可行面积本身也一定是 \(23\)-smooth。进一步地,一个 \(23\)-smooth 数的所有约数仍然都是 \(23\)-smooth。因此,一旦面积 \(A\) 固定,统计可制造变体就等价于统计 \(A\) 的那些既满足比例约束、又靠近平方根的约数对。

步骤 3:定义重数函数与最终目标

函数 \(r(A)\) 记录的是:面积 \(A\) 可以由多少个可行的“近方形”因子对产生。不同面积可能拥有相同的重数,而 \(M(k)\) 则从这些面积中挑出重数恰好为 \(k\) 的最小者。

因此整个题目可以写成

$$\sum_{k=2}^{100} M(k).$$

这样,问题被拆成两层:先枚举所有相关边长,再把面积按“由多少个可行因子对产生”来归类。

步骤 4:为什么不断放大边长上界是正确的

假设我们目前只枚举不超过某个上界 \(L\) 的边长。记 \(r_L(A)\) 为与 \(r(A)\) 相同的计数,但只统计 \(x,y\le L\) 的因子对。显然,随着 \(L\) 变大,可见的因子对只会增加,所以 \(r_L(A)\) 关于 \(L\) 是单调不减的。

现在考虑任意一个可行因子对,它满足 \(xy=A\) 且 \(x\le y\)。于是

$$x\le \sqrt{A}\le y.$$

再结合比例条件 \(10y\le 11x\),得到

$$y\le \frac{11}{10}x\le \frac{11}{10}\sqrt{A}.$$

这说明:只要

$$L\ge \left\lceil \frac{11}{10}\left\lceil \sqrt{A}\right\rceil \right\rceil,$$

面积 \(A\) 的所有可行因子对就一定已经全部出现在枚举范围内。于是,如果 \(M(2),\dots,M(100)\) 都已经找到了,并且这个上界条件还对

$$A=\max_{2\le k\le 100} M(k)$$

成立,那么任何尚未枚举到的因子对都不可能改变这些最小值,搜索就可以安全停止。

步骤 5:用校验值 \(M(3)=889200\) 做一个完整例子

实现中使用了如下校验值:

$$M(3)=889200.$$

对这个面积,满足条件的因子对恰好有三组:

$$ (900,988),\qquad (912,975),\qquad (936,950). $$

它们都满足 \(x\le y\),乘积都等于 \(889200\),而且每个比值 \(y/x\) 都小于 \(1.1\)。另外,这六个边长全部都是 \(23\)-smooth:

$$\begin{aligned} 900&=2^2\cdot 3^2\cdot 5^2, & 988&=2^2\cdot 13\cdot 19,\\ 912&=2^4\cdot 3\cdot 19, & 975&=3\cdot 5^2\cdot 13,\\ 936&=2^3\cdot 3^2\cdot 13, & 950&=2\cdot 5^2\cdot 19. \end{aligned}$$

因此 \(r(889200)=3\),而且没有更小的面积也具有同样的重数,这正是实现用来确认逻辑正确性的检查点。

代码如何工作

C++、Python 和 Java 实现都会先取一个中等规模的边长上界,然后递归生成不超过该上界的全部 \(23\)-smooth 边长。生成后的列表会排序并去重,使每一个可制造边长只被处理一次。

接着,程序在排序后的列表上扫描所有 \(x\le y\) 的组合。对每个较短边 \(x\),只需要考虑不超过 \(\left\lfloor \frac{11x}{10}\right\rfloor\) 的较长边,因为更大的 \(y\) 一定违反近方形约束。每找到一个可行因子对,就把对应面积 \(A=xy\) 的计数加一。全部扫描完成后,再从面积计数表中提取出每个重数 \(k\in[2,100]\) 对应的最小面积。

如果某些 \(M(k)\) 还没有出现,就把边长上界乘以 \(10\) 并重新执行。等到 \(2\) 到 \(100\) 的所有 \(M(k)\) 都已经找到后,程序还会检查覆盖条件

$$L\ge \left\lceil \frac{11}{10}\left\lceil \sqrt{\max_k M(k)}\right\rceil \right\rceil$$

以证明对所有相关面积而言,不会再有新的可行因子对藏在当前上界之外。此时就可以返回最终总和。

复杂度分析

记 \(s(L)\) 为最终上界 \(L\) 以内的 \(23\)-smooth 整数个数。生成这些数的过程是输出敏感的;排序并去重之后,时间复杂度为 \(O(s(L)\log s(L))\),空间复杂度为 \(O(s(L))\)。

因子对扫描在最坏情况下是 \(O(s(L)^2)\),不过约束 \(10y\le 11x\) 只保留了靠近对角线的一条很窄的带状区域,所以实际工作量会小得多。面积计数表的空间与遇到的不同可行面积数量成线性关系。由于上界按几何级数增长,总运行时间主要由最后一次成功的枚举主导。

参考资料

  1. 题目页面:https://projecteuler.net/problem=563
  2. 平滑数:Wikipedia — Smooth number
  3. 除数函数与因子对:Wikipedia — Divisor function
  4. 整数分解:Wikipedia — Integer factorization
  5. 几何平均数与平方根界:Wikipedia — Geometric mean

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

Для каждого целого \(k\) обозначим через \(M(k)\) наименьшую площадь прямоугольника, имеющего ровно \(k\) изготовимых вариантов. Вариант задается допустимой парой множителей \((x,y)\), где \(x\le y\), обе стороны изготовимы и выполняется

$$10y\le 11x,$$

то есть прямоугольник отличается от квадрата не более чем на \(10\%\). Требуется вычислить

$$\sum_{k=2}^{100} M(k).$$

Реализации кодируют изготовимость через длины сторон: положительная целая длина допустима тогда и только тогда, когда все ее простые делители принадлежат множеству \(\{2,3,5,7,11,13,17,19,23\}\).

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

Положим

$$P=\{2,3,5,7,11,13,17,19,23\}$$

и определим множество изготовимых сторон

$$\mathcal{S}=\left\{n\in \mathbb{Z}_{>0}: \text{каждый простой делитель } n \text{ принадлежит } P\right\}.$$

Для любой площади \(A\) определим ее допустимую кратность как

$$r(A)=\#\left\{(x,y)\in \mathcal{S}^2 : x\le y,\ xy=A,\ 10y\le 11x\right\}.$$

Тогда

$$M(k)=\min\{A:r(A)=k\}.$$

Шаг 1: Описать все изготовимые длины сторон

Разрешенные масштабирования могут вносить в длину стороны только простые множители, не превосходящие \(23\). Обратно, каждое простое из множества \(P\) само является допустимым множителем, поэтому повторением корректных масштабирований можно получить любой положительный целый, все простые делители которого лежат в \(P\).

Следовательно, изготовимые стороны совпадают в точности с \(23\)-гладкими положительными числами. Так исходное технологическое условие превращается в чисто арифметическое множество \(\mathcal{S}\).

Шаг 2: Перевести варианты прямоугольника в почти квадратные пары множителей

После упорядочивания сторон по правилу \(x\le y\) каждый вариант прямоугольника соответствует разложению \(A=xy\), удовлетворяющему

$$x\le y,\qquad 10y\le 11x.$$

Это неравенство заставляет оба множителя лежать рядом с \(\sqrt{A}\), а условие \(x\le y\) убирает зеркальный дубликат \((y,x)\).

Поскольку произведение \(23\)-гладких чисел снова является \(23\)-гладким, всякая допустимая площадь тоже \(23\)-гладкая. Кроме того, любой делитель \(23\)-гладкого числа снова \(23\)-гладок. Поэтому после фиксации площади \(A\) подсчет изготовимых вариантов равносилен подсчету допустимых пар делителей числа \(A\), расположенных около его квадратного корня.

Шаг 3: Ввести функцию кратности и целевую сумму

Функция \(r(A)\) показывает, сколько допустимых почти квадратных факторизаций дают одну и ту же площадь. Разные площади могут иметь одну и ту же кратность, а \(M(k)\) выбирает наименьшую площадь с кратностью ровно \(k\).

Тем самым вся задача сводится к вычислению

$$\sum_{k=2}^{100} M(k).$$

Такое представление делит работу на два этапа: сначала перечислить все нужные длины сторон, затем сгруппировать площади по числу допустимых пар множителей, которые их образуют.

Шаг 4: Почему увеличение предела по сторонам работает корректно

Предположим, что пока перечисляются только стороны не больше некоторого предела \(L\). Пусть \(r_L(A)\) обозначает тот же подсчет, что и \(r(A)\), но только по парам \(x,y\le L\). При росте \(L\) множество видимых пар может лишь расширяться, так что \(r_L(A)\) монотонна.

Рассмотрим любую допустимую пару площади \(A\). Из условий \(x\le y\) и \(xy=A\) следует \(x\le \sqrt{A}\le y\). Вместе с условием \(10y\le 11x\) это дает

$$y\le \frac{11}{10}x\le \frac{11}{10}\sqrt{A}.$$

Значит, все допустимые пары для площади \(A\) гарантированно попадают под предел \(L\), как только

$$L\ge \left\lceil \frac{11}{10}\left\lceil \sqrt{A}\right\rceil \right\rceil.$$

Если все нужные значения \(M(2),\dots,M(100)\) уже найдены и это неравенство дополнительно выполняется для

$$A=\max_{2\le k\le 100} M(k),$$

то никакая еще не видимая пара уже не сможет изменить какой-либо из нужных минимумов.

Шаг 5: Разобранный пример с контрольным значением \(M(3)=889200\)

Реализации проверяют контрольное значение

$$M(3)=889200.$$

Для этой площади допустимыми являются ровно три пары множителей:

$$ (900,988),\qquad (912,975),\qquad (936,950). $$

Каждая пара удовлетворяет \(x\le y\), произведение всегда равно \(889200\), а отношение \(y/x\) меньше \(1.1\). Все стороны при этом \(23\)-гладкие:

$$\begin{aligned} 900&=2^2\cdot 3^2\cdot 5^2, & 988&=2^2\cdot 13\cdot 19,\\ 912&=2^4\cdot 3\cdot 19, & 975&=3\cdot 5^2\cdot 13,\\ 936&=2^3\cdot 3^2\cdot 13, & 950&=2\cdot 5^2\cdot 19. \end{aligned}$$

Следовательно, \(r(889200)=3\), и меньшей площади с такой кратностью нет.

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

Реализации на C++, Python и Java начинают с умеренного предела на длины сторон и рекурсивно генерируют все \(23\)-гладкие стороны до этого предела. Затем список сортируется и очищается от повторов, чтобы каждая изготовимая длина учитывалась ровно один раз.

После этого упорядоченный список просматривается по парам \(x\le y\). Для каждой короткой стороны \(x\) рассматриваются только длинные стороны до \(\left\lfloor \frac{11x}{10}\right\rfloor\), поскольку большие значения немедленно нарушают условие близости к квадрату. Каждая допустимая пара увеличивает счетчик своей площади \(A=xy\). Когда все пары обработаны, из таблицы площадей извлекается минимальная площадь для каждой кратности \(k\in[2,100]\).

Если некоторые \(M(k)\) еще не появились, предел по сторонам умножается на \(10\), и процесс повторяется. Когда все \(M(k)\) от \(2\) до \(100\) уже найдены, дополнительно проверяется оценка

$$L\ge \left\lceil \frac{11}{10}\left\lceil \sqrt{\max_k M(k)}\right\rceil \right\rceil$$

и тем самым доказывается, что за текущим пределом не осталось ни одной допустимой пары, способной изменить нужные минимумы. После этого возвращается итоговая сумма.

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

Пусть \(s(L)\) обозначает число \(23\)-гладких целых чисел, не превосходящих окончательный предел \(L\). Их генерация чувствительна к размеру вывода; после сортировки и удаления повторов она требует \(O(s(L)\log s(L))\) времени и \(O(s(L))\) памяти.

Просмотр пар в худшем случае занимает \(O(s(L)^2)\), хотя ограничение \(10y\le 11x\) оставляет только узкую полосу около диагонали и на практике сильно уменьшает объем работы. Таблица подсчета площадей использует линейную память по числу различных допустимых площадей. Поскольку предел растет геометрически, суммарное время в основном определяется последним успешным проходом.

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

  1. Страница задачи: https://projecteuler.net/problem=563
  2. Гладкие числа: Wikipedia — Smooth number
  3. Функция делителей и пары множителей: Wikipedia — Divisor function
  4. Разложение на простые множители: Wikipedia — Integer factorization
  5. Среднее геометрическое и оценка через квадратный корень: Wikipedia — Geometric mean

ملخص المسألة

لكل عدد صحيح \(k\)، نرمز بـ \(M(k)\) إلى أصغر مساحة مستطيل لها بالضبط \(k\) صور قابلة للتصنيع. والصورة هنا هي زوج عوامل مسموح \((x,y)\) يحقق \(x\le y\)، وتكون كلتا الضلعين قابلتين للتصنيع، كما يحقق

$$10y\le 11x,$$

أي إن المستطيل لا يبتعد عن المربع بأكثر من \(10\%\). والمطلوب هو حساب

$$\sum_{k=2}^{100} M(k).$$

تعتمد التطبيقات معيارًا عدديًا للتصنيع: يكون طول الضلع الصحيح الموجب مقبولًا إذا وفقط إذا كانت جميع عوامله الأولية ضمن المجموعة \(\{2,3,5,7,11,13,17,19,23\}\).

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

لنضع

$$P=\{2,3,5,7,11,13,17,19,23\}$$

ولنعرّف مجموعة الأضلاع القابلة للتصنيع بأنها

$$\mathcal{S}=\left\{\prod_{p\in P} p^{e_p} : e_p\in \mathbb{Z}_{\ge 0}\right\}.$$

ولكل مساحة \(A\)، نعرّف تعددها المسموح بالصيغة

$$r(A)=\#\left\{(x,y)\in \mathcal{S}^2 : x\le y,\ xy=A,\ 10y\le 11x\right\}.$$

وعندئذٍ

$$M(k)=\min\{A:r(A)=k\}.$$

الخطوة 1: توصيف أطوال الأضلاع القابلة للتصنيع

إن عمليات التكبير المسموح بها لا يمكنها إدخال عوامل أولية أكبر من \(23\) في طول الضلع. وبالعكس، فإن كل عدد أولي في \(P\) هو بذاته مضاعِف مسموح، ولذلك يمكن بواسطة التكرار بناء أي عدد صحيح موجب لا تحتوي عوامله الأولية إلا على عناصر من \(P\).

إذًا فالأضلاع القابلة للتصنيع هي بالضبط الأعداد الصحيحة الموجبة \(23\)-smooth. وبهذا تتحول قاعدة التصنيع الأصلية إلى مجموعة عددية واضحة هي \(\mathcal{S}\).

الخطوة 2: تحويل صور المستطيل إلى أزواج عوامل قريبة من المربع

بعد ترتيب الضلعين بحيث \(x\le y\)، تصبح كل صورة لمستطيل مقابلة لتحليل من الشكل \(A=xy\) يحقق

$$x\le y,\qquad 10y\le 11x.$$

يفرض هذا الشرط أن يكون العاملان قريبين من \(\sqrt{A}\)، كما أن شرط \(x\le y\) يزيل النسخة المتناظرة \((y,x)\).

وبما أن حاصل ضرب عددين \(23\)-smooth يبقى \(23\)-smooth، فإن كل مساحة مسموحة هي نفسها \(23\)-smooth. وكذلك فإن كل قاسم لعدد \(23\)-smooth يبقى من النوع نفسه. لذلك، بعد تثبيت مساحة \(A\)، يصبح عدّ الصور القابلة للتصنيع مكافئًا لعدّ أزواج القواسم المسموح بها لتلك المساحة والقريبة من جذرها التربيعي.

الخطوة 3: تعريف دالة التعدد والهدف النهائي

تعطي الدالة \(r(A)\) عدد التحليلات المسموح بها والقريبة من المربع التي تنتج المساحة نفسها. وقد تتشارك مساحات مختلفة في التعدد نفسه، بينما تختار \(M(k)\) أصغر مساحة يكون تعددها مساويًا تمامًا لـ \(k\).

وعليه، تصبح المسألة كلها

$$\sum_{k=2}^{100} M(k).$$

وهذه الصياغة تفصل المهمة إلى مستويين: أولًا تعداد جميع أطوال الأضلاع ذات الصلة، ثم تجميع المساحات بحسب عدد أزواج العوامل المسموح بها التي تولدها.

الخطوة 4: لماذا توسيع حد الأضلاع صحيح رياضيًا

لنفترض أننا نعدّ فقط الأضلاع التي لا تتجاوز حدًا أعلى \(L\). ولْيكن \(r_L(A)\) هو العدّ نفسه مثل \(r(A)\)، لكن مع تقييد الأزواج إلى \(x,y\le L\). عندما يكبر \(L\)، فإن مجموعة الأزواج المرئية لا يمكن إلا أن تزداد، ولذلك فالدالة \(r_L(A)\) رتيبة.

لنأخذ الآن أي زوج مسموح مساحته \(A\). من الشرطين \(x\le y\) و \(xy=A\) نستنتج أن

$$x\le \sqrt{A}\le y.$$

وبضم هذا إلى الشرط \(10y\le 11x\) نحصل على

$$y\le \frac{11}{10}x\le \frac{11}{10}\sqrt{A}.$$

إذن كل زوج مسموح للمساحة \(A\) يكون مضمون الظهور بمجرد أن يتحقق

$$L\ge \left\lceil \frac{11}{10}\left\lceil \sqrt{A}\right\rceil \right\rceil.$$

فإذا كانت جميع القيم \(M(2),\dots,M(100)\) قد وُجدت بالفعل، وكان هذا الشرط صحيحًا أيضًا من أجل

$$A=\max_{2\le k\le 100} M(k),$$

فلن يبقى أي زوج غير مرئي قادر على تغيير أي حد أدنى مهم.

الخطوة 5: مثال محلول باستخدام قيمة التحقق \(M(3)=889200\)

تتحقق التطبيقات من القيمة

$$M(3)=889200.$$

ولهذه المساحة تكون أزواج العوامل المسموح بها هي

$$ (900,988),\qquad (912,975),\qquad (936,950). $$

كل زوج يحقق \(x\le y\)، وكل حاصل ضرب يساوي \(889200\)، وكل نسبة \(y/x\) أصغر من \(1.1\). كما أن جميع هذه الأضلاع من النوع \(23\)-smooth:

$$\begin{aligned} 900&=2^2\cdot 3^2\cdot 5^2, & 988&=2^2\cdot 13\cdot 19,\\ 912&=2^4\cdot 3\cdot 19, & 975&=3\cdot 5^2\cdot 13,\\ 936&=2^3\cdot 3^2\cdot 13, & 950&=2\cdot 5^2\cdot 19. \end{aligned}$$

وعليه فإن \(r(889200)=3\)، وهذه أول مساحة تمتلك هذا التعدد.

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

تبدأ تطبيقات C++ وPython وJava بحد متوسط للأضلاع، ثم تولّد بطريقة عودية جميع الأطوال \(23\)-smooth التي لا تتجاوز ذلك الحد. بعد ذلك تُرتّب القائمة وتُزال التكرارات، بحيث يُعالَج كل ضلع قابل للتصنيع مرة واحدة فقط.

ثم يُفحَص كل زوج يحقق \(x\le y\) داخل القائمة المرتبة. ولكل ضلع أقصر \(x\)، لا تُدرَس إلا الأضلاع الأطول حتى \(\left\lfloor \frac{11x}{10}\right\rfloor\)، لأن أي قيمة أكبر ستكسر شرط القرب من المربع. وكل زوج مسموح يزيد عدّاد المساحة \(A=xy\) بمقدار واحد. وبعد انتهاء الفحص، تُستخرج من جدول المساحات أصغر مساحة لكل تعدد \(k\in[2,100]\).

إذا بقيت بعض القيم \(M(k)\) مفقودة، يُضرَب حد الأضلاع في \(10\) وتُعاد العملية. وعندما تظهر جميع القيم من \(2\) إلى \(100\)، يطبّق التنفيذ أيضًا شرط التغطية

$$L\ge \left\lceil \frac{11}{10}\left\lceil \sqrt{\max_k M(k)}\right\rceil \right\rceil$$

ليبرهن أنه لم يعد هناك أي زوج مسموح ذي صلة يقع خارج الحد الحالي. عند هذه النقطة تُعاد النهاية المطلوبة.

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

لنرمز بـ \(s(L)\) إلى عدد الأعداد الصحيحة \(23\)-smooth التي لا تتجاوز الحد النهائي \(L\). إن توليد هذه الأعداد حساس لحجم الخرج؛ وبعد الفرز وإزالة التكرار تكون الكلفة \(O(s(L)\log s(L))\) زمنًا و \(O(s(L))\) ذاكرة.

أما فحص الأزواج فحده الأسوأ هو \(O(s(L)^2)\)، غير أن القيد \(10y\le 11x\) يترك شريطًا ضيقًا فقط قرب القطر، مما يقلل العبء العملي كثيرًا. ويستخدم جدول عدّ المساحات ذاكرة خطية في عدد المساحات المسموح بها المختلفة التي تظهر. وبما أن حد الأضلاع ينمو هندسيًا، فإن الجولة الناجحة الأخيرة هي التي تهيمن على الزمن الكلي.

مراجع

  1. صفحة المسألة: https://projecteuler.net/problem=563
  2. الأعداد الملساء: Wikipedia — Smooth number
  3. دالة القواسم وأزواج العوامل: Wikipedia — Divisor function
  4. التحليل إلى عوامل أولية: Wikipedia — Integer factorization
  5. المتوسط الهندسي وحد الجذر التربيعي: Wikipedia — Geometric mean