Let \(T=43200\) denote one full 12-hour cycle measured in seconds. If the hour, minute, and second hands are modeled by the speed triple
$$s_1=1,\qquad s_2=12,\qquad s_3=720,$$
then at time \(t\in[0,T)\) their angular positions are \(s_1t\), \(s_2t\), and \(s_3t\) modulo \(T\). The task is to count the moments for which the visible three-point pattern on the dial is ambiguous: the same observed configuration can be explained by at least two different assignments of the labels “hour”, “minute”, and “second”.
The C++, Python, and Java implementations solve the problem one permutation at a time. For each non-identity relabeling, the geometry becomes a pair of linear congruences, which then reduces to a finite rational grid of candidate times.
Suppose that the configuration seen at time \(t\) can also be explained by another time \(\tau\) after a nontrivial permutation \(\pi\) of the three hand labels. Because the observed pattern is unlabeled, the two descriptions may differ by a global rotation \(r\). Therefore
$$s_i t \equiv s_{\pi(i)}\tau + r \pmod{T},\qquad i=1,2,3.$$
Subtract the first equation from the second and third to eliminate the unknown rotation. Since
$$s_2-s_1=11,\qquad s_3-s_1=719,$$
we obtain
$$11t \equiv \alpha_{\pi}\tau \pmod{T},\qquad 719t \equiv \beta_{\pi}\tau \pmod{T},$$
where
$$\alpha_{\pi}=s_{\pi(2)}-s_{\pi(1)},\qquad \beta_{\pi}=s_{\pi(3)}-s_{\pi(1)}.$$
At this point the clock picture has been converted into pure modular arithmetic.
Multiply the first congruence by \(\beta_{\pi}\) and the second by \(\alpha_{\pi}\), then subtract. The term containing \(\tau\) disappears:
$$\left(11\beta_{\pi}-719\alpha_{\pi}\right)t \equiv 0 \pmod{T}.$$
Define the determinant-like quantity
$$\Delta_{\pi}=719\alpha_{\pi}-11\beta_{\pi},\qquad N_{\pi}=|\Delta_{\pi}|.$$
Then every candidate moment for that permutation must satisfy
$$\Delta_{\pi}t \equiv 0 \pmod{T},$$
so the solutions in \([0,T)\) are exactly
$$t_n=\frac{Tn}{N_{\pi}},\qquad n=0,1,\dots,N_{\pi}-1.$$
Thus each permutation contributes a finite arithmetic grid of rational times rather than a continuous search over the interval.
For every non-identity permutation in this problem, the pair \((\alpha_{\pi},\beta_{\pi})\) is coprime. Hence there exist integers \(u_{\pi},v_{\pi}\) such that
$$u_{\pi}\beta_{\pi}+v_{\pi}\alpha_{\pi}=1.$$
Multiply the congruence \(11t\equiv \alpha_{\pi}\tau\pmod{T}\) by \(v_{\pi}\) and the congruence \(719t\equiv \beta_{\pi}\tau\pmod{T}\) by \(u_{\pi}\), then add them. The left-hand side becomes \(\tau\):
$$\tau \equiv \lambda_{\pi} t \pmod{T},\qquad \lambda_{\pi}=11v_{\pi}+719u_{\pi}.$$
Because \(t=t_n=Tn/N_{\pi}\), the partner time also lies on the same grid:
$$\tau=t_{n'},\qquad n' \equiv \lambda_{\pi}n \pmod{N_{\pi}}.$$
A moment is genuinely ambiguous for that permutation exactly when \(n'\ne n\). Fixed points are ignored because they do not produce a second distinct interpretation.
The same real moment can arise from different permutations, so the times must be deduplicated globally. For one permutation we start from
$$t_n=\frac{Tn}{N_{\pi}}.$$
Let
$$g_0=\gcd(T,N_{\pi}),\qquad T_0=\frac{T}{g_0},\qquad N_0=\frac{N_{\pi}}{g_0}.$$
Then
$$t_n=\frac{T_0 n}{N_0}.$$
Reducing once more by \(g=\gcd(n,N_0)\) gives the canonical fraction
$$t_n=\frac{T_0(n/g)}{N_0/g}.$$
Storing the pair \(\left(T_0(n/g),\,N_0/g\right)\) guarantees that equal moments coming from different permutations are merged correctly.
Take the permutation that swaps the hour and minute roles while keeping the fastest hand in the third position, so that
$$\left(s_{\pi(1)},s_{\pi(2)},s_{\pi(3)}\right)=(12,1,720).$$
Then
$$\alpha_{\pi}=1-12=-11,\qquad \beta_{\pi}=720-12=708,$$
and therefore
$$\Delta_{\pi}=719(-11)-11(708)=-15697,\qquad N_{\pi}=15697.$$
One Bézout identity is
$$3\cdot 708 + 193\cdot(-11)=1,$$
so we may take \(u_{\pi}=3\) and \(v_{\pi}=193\). This yields
$$\lambda_{\pi}\equiv 11\cdot 193 + 719\cdot 3 \equiv 4280 \pmod{15697}.$$
Hence the candidate times are
$$t_n=\frac{43200n}{15697},\qquad \tau_n=\frac{43200\left(4280n\bmod 15697\right)}{15697}.$$
For \(n=1\) we get
$$t=\frac{43200}{15697}\approx 2.752118239\text{ s},\qquad \tau=\frac{43200\cdot 4280}{15697}\approx 11779.066063579\text{ s}.$$
Because \(4280\not\equiv 1\pmod{15697}\), this is a genuine ambiguous moment. The implementations repeat exactly this calculation for all five non-identity permutations and then remove overlaps.
The C++, Python, and Java implementations iterate over the five non-identity permutations of the speed triple \((1,12,720)\). For each permutation they compute the two speed differences, the determinant magnitude \(N_{\pi}\), and one Bézout pair that reconstructs the partner index \(n'\) from \(n\).
They then scan every \(n\) with \(0\le n<N_{\pi}\), discard the fixed points satisfying \(n'=n\), and convert the surviving time \(Tn/N_{\pi}\) into a reduced numerator-denominator pair. This reduction is purely arithmetic, so no floating-point comparison is needed.
The C++ implementation collects all reduced fractions and performs a final sort-and-unique pass. The Python and Java implementations deduplicate immediately with set-style storage. Despite that storage difference, all three implementations enumerate the same rational moments and return the size of the final unique collection.
Let \(N_{\pi}=|719\alpha_{\pi}-11\beta_{\pi}|\). The main work is the enumeration of all indices \(n=0,\dots,N_{\pi}-1\) over the five non-identity permutations, so the arithmetic scan costs
$$O\!\left(\sum_{\pi\ne\mathrm{id}} N_{\pi}\right).$$
Each candidate requires only a constant amount of gcd arithmetic. If \(M\) candidate fractions survive the fixed-point test, the final deduplication cost is \(O(M\log M)\) for the sort-based implementation and expected \(O(M)\) for the set-based ones. Memory usage is \(O(M)\). For this concrete speed triple, the total scan length is \(2052026\), so the method is easily practical.
Sei \(T=43200\) ein vollständiger 12-Stunden-Zyklus in Sekunden. Modelliert man Stunden-, Minuten- und Sekundenzeiger durch die Geschwindigkeiten
$$s_1=1,\qquad s_2=12,\qquad s_3=720,$$
dann liegen ihre Winkelpositionen zum Zeitpunkt \(t\in[0,T)\) bei \(s_1t\), \(s_2t\) und \(s_3t\) modulo \(T\). Gesucht ist die Anzahl der Zeitpunkte, an denen das sichtbare Drei-Punkte-Muster auf dem Zifferblatt mehrdeutig ist, also zu mindestens zwei verschiedenen Zuordnungen der Bezeichnungen „Stundenzeiger“, „Minutenzeiger“ und „Sekundenzeiger“ passt.
Die Implementierungen zerlegen das Problem nach Permutationen. Für jede nichttriviale Umbenennung der drei Zeiger entsteht ein lineares Kongruenzsystem, das sich auf ein endliches Gitter rationaler Zeitpunkte reduziert.
Angenommen, dieselbe sichtbare Konfiguration tritt zur Zeit \(t\) auf und kann außerdem durch einen anderen Zeitpunkt \(\tau\) mit einer nichtidentischen Permutation \(\pi\) erklärt werden. Da nur das unlabelede Muster zählt, dürfen sich beide Beschreibungen um eine globale Rotation \(r\) unterscheiden. Also gilt
$$s_i t \equiv s_{\pi(i)}\tau + r \pmod{T},\qquad i=1,2,3.$$
Subtrahiert man die erste Gleichung von der zweiten und dritten, verschwindet die unbekannte Rotation. Wegen
$$s_2-s_1=11,\qquad s_3-s_1=719$$
erhält man
$$11t \equiv \alpha_{\pi}\tau \pmod{T},\qquad 719t \equiv \beta_{\pi}\tau \pmod{T},$$
wobei
$$\alpha_{\pi}=s_{\pi(2)}-s_{\pi(1)},\qquad \beta_{\pi}=s_{\pi(3)}-s_{\pi(1)}.$$
Damit ist die geometrische Fragestellung vollständig in modulare Arithmetik übersetzt.
Multipliziert man die erste Kongruenz mit \(\beta_{\pi}\) und die zweite mit \(\alpha_{\pi}\), dann fällt \(\tau\) beim Subtrahieren weg:
$$\left(11\beta_{\pi}-719\alpha_{\pi}\right)t \equiv 0 \pmod{T}.$$
Definiere
$$\Delta_{\pi}=719\alpha_{\pi}-11\beta_{\pi},\qquad N_{\pi}=|\Delta_{\pi}|.$$
Dann muss jeder Kandidat die Bedingung
$$\Delta_{\pi}t \equiv 0 \pmod{T}$$
erfüllen. Die Lösungen im Intervall \([0,T)\) sind genau
$$t_n=\frac{Tn}{N_{\pi}},\qquad n=0,1,\dots,N_{\pi}-1.$$
Jede Permutation liefert also nicht ein kontinuierliches Suchproblem, sondern nur endlich viele rationale Kandidaten.
Für alle fünf nichttrivialen Permutationen in dieser Aufgabe sind \(\alpha_{\pi}\) und \(\beta_{\pi}\) teilerfremd. Daher existieren ganze Zahlen \(u_{\pi},v_{\pi}\) mit
$$u_{\pi}\beta_{\pi}+v_{\pi}\alpha_{\pi}=1.$$
Multipliziert man \(11t\equiv \alpha_{\pi}\tau\pmod{T}\) mit \(v_{\pi}\) und \(719t\equiv \beta_{\pi}\tau\pmod{T}\) mit \(u_{\pi}\), dann ergibt die Summe
$$\tau \equiv \lambda_{\pi} t \pmod{T},\qquad \lambda_{\pi}=11v_{\pi}+719u_{\pi}.$$
Da \(t=t_n=Tn/N_{\pi}\) gilt, liegt auch der Partnerzeitpunkt auf demselben Gitter:
$$\tau=t_{n'},\qquad n' \equiv \lambda_{\pi}n \pmod{N_{\pi}}.$$
Ein Zeitpunkt ist für diese Permutation genau dann wirklich mehrdeutig, wenn \(n'\ne n\). Fixpunkte erzeugen keine zweite verschiedene Interpretation und werden verworfen.
Dasselbe reale \(t\) kann aus mehreren Permutationen stammen. Deshalb müssen alle Kandidaten global dedupliziert werden. Ausgangspunkt ist
$$t_n=\frac{Tn}{N_{\pi}}.$$
Setze
$$g_0=\gcd(T,N_{\pi}),\qquad T_0=\frac{T}{g_0},\qquad N_0=\frac{N_{\pi}}{g_0}.$$
Dann gilt
$$t_n=\frac{T_0 n}{N_0}.$$
Mit einem weiteren Kürzen durch \(g=\gcd(n,N_0)\) erhält man den kanonischen Bruch
$$t_n=\frac{T_0(n/g)}{N_0/g}.$$
Das gespeicherte Zahlenpaar \(\left(T_0(n/g),\,N_0/g\right)\) identifiziert den Zeitpunkt eindeutig und erlaubt korrektes Zusammenführen über alle Permutationen hinweg.
Betrachte die Permutation, welche Stunden- und Minutenrolle vertauscht, den schnellsten Zeiger aber an dritter Stelle belässt. Dann ist
$$\left(s_{\pi(1)},s_{\pi(2)},s_{\pi(3)}\right)=(12,1,720).$$
Damit folgt
$$\alpha_{\pi}=1-12=-11,\qquad \beta_{\pi}=720-12=708,$$
und somit
$$\Delta_{\pi}=719(-11)-11(708)=-15697,\qquad N_{\pi}=15697.$$
Eine passende Bézout-Darstellung ist
$$3\cdot 708 + 193\cdot(-11)=1,$$
also kann man \(u_{\pi}=3\) und \(v_{\pi}=193\) wählen. Daraus ergibt sich
$$\lambda_{\pi}\equiv 11\cdot 193 + 719\cdot 3 \equiv 4280 \pmod{15697}.$$
Die Kandidatenzeiten lauten damit
$$t_n=\frac{43200n}{15697},\qquad \tau_n=\frac{43200\left(4280n\bmod 15697\right)}{15697}.$$
Für \(n=1\) erhält man
$$t=\frac{43200}{15697}\approx 2.752118239\text{ s},\qquad \tau=\frac{43200\cdot 4280}{15697}\approx 11779.066063579\text{ s}.$$
Da \(4280\not\equiv 1\pmod{15697}\), handelt es sich um einen echten mehrdeutigen Zeitpunkt. Genau dieses Schema wird anschließend für alle fünf nichtidentischen Permutationen wiederholt.
Die C++-, Python- und Java-Implementierungen durchlaufen die fünf nichttrivialen Permutationen des Geschwindigkeitsvektors \((1,12,720)\). Für jede davon werden die beiden Geschwindigkeitsdifferenzen, die Determinantenbetragsgröße \(N_{\pi}\) und ein Bézout-Paar berechnet, mit dem sich der Partnerindex \(n'\) aus \(n\) rekonstruieren lässt.
Danach werden alle \(n\) mit \(0\le n<N_{\pi}\) abgearbeitet. Fixpunkte mit \(n'=n\) werden verworfen; die übrigen Kandidaten werden als gekürzte Zähler-Nenner-Paare gespeichert. Dadurch bleiben die Vergleiche exakt und benötigen keine Fließkomma-Heuristik.
Die C++-Variante sammelt alle Brüche und entfernt Duplikate am Ende per Sortierung und Unique. Die Python- und Java-Varianten deduplizieren direkt mit mengenartiger Speicherung. Inhaltlich erzeugen jedoch alle drei Implementierungen dieselbe Menge rationaler Zeitpunkte und geben deren Anzahl zurück.
Mit \(N_{\pi}=|719\alpha_{\pi}-11\beta_{\pi}|\) kostet der Hauptteil der Rechnung die Enumeration aller Indizes \(n=0,\dots,N_{\pi}-1\) über die fünf nichtidentischen Permutationen hinweg, also
$$O\!\left(\sum_{\pi\ne\mathrm{id}} N_{\pi}\right).$$
Jeder Kandidat benötigt nur konstant viele ggT-Berechnungen. Überleben \(M\) Kandidaten den Fixpunkttest, dann kostet die abschließende Deduplikation \(O(M\log M)\) in der sortierbasierten Variante und erwartetes \(O(M)\) in den mengenbasierten Varianten. Der Speicherbedarf ist \(O(M)\). Für die konkrete Geschwindigkeitswahl beträgt die gesamte Scanlänge \(2052026\) und ist damit problemlos handhabbar.
\(T=43200\) bir tam 12 saatlik döngüyü saniye cinsinden göstersin. Saat, dakika ve saniye kollarını
$$s_1=1,\qquad s_2=12,\qquad s_3=720$$
hız üçlüsüyle modellediğimizde, \(t\in[0,T)\) anındaki açısal konumlar \(s_1t\), \(s_2t\) ve \(s_3t\) değerlerinin \(T\) modundaki halleri olur. Amaç, kadrandaki görünür üç noktalı düzenin belirsiz olduğu anların sayısını bulmaktır; yani aynı görüntü en az iki farklı “saat kolu, dakika kolu, saniye kolu” etiketlemesiyle açıklanabilmelidir.
C++, Python ve Java uygulamaları problemi permütasyonlara ayırarak çözer. Her özdeşlik dışı etiket değişimi için geometri, doğrusal kongrüanslara dönüşür; bu sistem de sonlu bir rasyonel zaman ızgarasına indirgenir.
\(t\) anındaki görünümün, kolların etiketleri özdeşlik dışı bir \(\pi\) permütasyonu ile yeniden yorumlandığında başka bir \(\tau\) anında da ortaya çıktığını varsayalım. Gözlenen desen etiketsiz olduğu için iki açıklama arasında ortak bir dönme miktarı \(r\) bulunabilir. O halde
$$s_i t \equiv s_{\pi(i)}\tau + r \pmod{T},\qquad i=1,2,3.$$
İlk denklemi diğer ikisinden çıkarırsak bilinmeyen dönme kaybolur. Çünkü
$$s_2-s_1=11,\qquad s_3-s_1=719,$$
şu sistemi elde ederiz:
$$11t \equiv \alpha_{\pi}\tau \pmod{T},\qquad 719t \equiv \beta_{\pi}\tau \pmod{T},$$
burada
$$\alpha_{\pi}=s_{\pi(2)}-s_{\pi(1)},\qquad \beta_{\pi}=s_{\pi(3)}-s_{\pi(1)}.$$
Böylece saat resmi tamamen modüler aritmetik problemine dönüşmüş olur.
İlk kongrüansı \(\beta_{\pi}\) ile, ikincisini \(\alpha_{\pi}\) ile çarpıp çıkaralım. \(\tau\) terimi yok olur:
$$\left(11\beta_{\pi}-719\alpha_{\pi}\right)t \equiv 0 \pmod{T}.$$
Şimdi
$$\Delta_{\pi}=719\alpha_{\pi}-11\beta_{\pi},\qquad N_{\pi}=|\Delta_{\pi}|$$
tanımını yapalım. O zaman her aday an
$$\Delta_{\pi}t \equiv 0 \pmod{T}$$
koşulunu sağlamalıdır. \([0,T)\) aralığındaki bütün çözümler tam olarak
$$t_n=\frac{Tn}{N_{\pi}},\qquad n=0,1,\dots,N_{\pi}-1$$
şeklindedir. Yani her permütasyon sürekli bir arama değil, sonlu sayıda rasyonel aday üretir.
Bu problemdeki her özdeşlik dışı permütasyon için \(\alpha_{\pi}\) ile \(\beta_{\pi}\) aralarında asaldır. Dolayısıyla
$$u_{\pi}\beta_{\pi}+v_{\pi}\alpha_{\pi}=1$$
olacak şekilde tam sayılar vardır. \(11t\equiv \alpha_{\pi}\tau\pmod{T}\) eşitliğini \(v_{\pi}\) ile, \(719t\equiv \beta_{\pi}\tau\pmod{T}\) eşitliğini \(u_{\pi}\) ile çarpıp toplarsak
$$\tau \equiv \lambda_{\pi} t \pmod{T},\qquad \lambda_{\pi}=11v_{\pi}+719u_{\pi}$$
sonucuna ulaşırız. \(t=t_n=Tn/N_{\pi}\) olduğundan partner zaman da aynı ızgara üzerindedir:
$$\tau=t_{n'},\qquad n' \equiv \lambda_{\pi}n \pmod{N_{\pi}}.$$
Bir an ancak \(n'\ne n\) ise gerçekten belirsizdir. Sabit noktalar ikinci bir farklı yorum üretmediği için atılır.
Aynı gerçek an birden fazla permütasyondan çıkabilir; bu yüzden bütün adayların küresel olarak tekilleştirilmesi gerekir. Başlangıçta
$$t_n=\frac{Tn}{N_{\pi}}$$
vardır. Şimdi
$$g_0=\gcd(T,N_{\pi}),\qquad T_0=\frac{T}{g_0},\qquad N_0=\frac{N_{\pi}}{g_0}$$
olsun. Böylece
$$t_n=\frac{T_0 n}{N_0}$$
yazılır. Bir de \(g=\gcd(n,N_0)\) ile sadeleştirince kanonik biçim
$$t_n=\frac{T_0(n/g)}{N_0/g}$$
olur. Kaydedilen \(\left(T_0(n/g),\,N_0/g\right)\) çifti, aynı anın farklı permütasyonlardan gelmesi durumunda doğru biçimde birleşmesini sağlar.
Saat ve dakika rollerini değiştirip en hızlı kolu üçüncü sırada bırakan permütasyonu ele alalım. Bu durumda
$$\left(s_{\pi(1)},s_{\pi(2)},s_{\pi(3)}\right)=(12,1,720).$$
Buna göre
$$\alpha_{\pi}=1-12=-11,\qquad \beta_{\pi}=720-12=708,$$
ve dolayısıyla
$$\Delta_{\pi}=719(-11)-11(708)=-15697,\qquad N_{\pi}=15697.$$
Uygun bir Bézout eşitliği
$$3\cdot 708 + 193\cdot(-11)=1$$
olduğundan \(u_{\pi}=3\), \(v_{\pi}=193\) seçilebilir. Buradan
$$\lambda_{\pi}\equiv 11\cdot 193 + 719\cdot 3 \equiv 4280 \pmod{15697}$$
çıkar. Demek ki aday zamanlar
$$t_n=\frac{43200n}{15697},\qquad \tau_n=\frac{43200\left(4280n\bmod 15697\right)}{15697}$$
şeklindedir. \(n=1\) için
$$t=\frac{43200}{15697}\approx 2.752118239\text{ s},\qquad \tau=\frac{43200\cdot 4280}{15697}\approx 11779.066063579\text{ s}$$
elde edilir. \(4280\not\equiv 1\pmod{15697}\) olduğu için bu, gerçekten iki farklı yorum veren bir andır. Uygulamalar aynı hesabı beş özdeşlik dışı permütasyonun tamamı için yapar.
C++, Python ve Java uygulamaları \((1,12,720)\) hız üçlüsünün beş özdeşlik dışı permütasyonunu sırayla gezer. Her permütasyonda iki hız farkı, determinant büyüklüğü \(N_{\pi}\) ve \(n\) indeksinden partner indeks \(n'\) değerini üreten bir Bézout çifti hesaplanır.
Daha sonra \(0\le n<N_{\pi}\) aralığındaki bütün değerler taranır. \(n'=n\) veren sabit noktalar atılır; kalan her aday \(Tn/N_{\pi}\) zamanı sadeleştirilmiş pay-payda çifti olarak tutulur. Böylece tüm karşılaştırmalar tam sayı aritmetiği ile kesin biçimde yapılır.
C++ sürümü bütün adayları toplayıp en sonda sıralama ve tekilleştirme uygular. Python ve Java sürümleri ise küme tabanlı saklama ile adayları eklenirken tekilleştirir. Depolama biçimi farklı olsa da üç uygulama da aynı rasyonel zaman kümesini üretir ve son büyüklüğü döndürür.
\(N_{\pi}=|719\alpha_{\pi}-11\beta_{\pi}|\) olsun. Ana maliyet, beş özdeşlik dışı permütasyon için tüm \(n=0,\dots,N_{\pi}-1\) indekslerinin taranmasıdır; yani
$$O\!\left(\sum_{\pi\ne\mathrm{id}} N_{\pi}\right).$$
Her adayda yalnızca sabit sayıda EBOB hesabı yapılır. Sabit nokta testinden sonra \(M\) aday kalıyorsa, son tekilleştirme sıralama tabanlı sürümde \(O(M\log M)\), küme tabanlı sürümlerde beklenen \(O(M)\) maliyettedir. Bellek kullanımı \(O(M)\)'dir. Bu özel hız üçlüsünde toplam tarama uzunluğu \(2052026\) olduğundan yöntem rahatlıkla yeterlidir.
Sea \(T=43200\) un ciclo completo de 12 horas medido en segundos. Si modelamos las agujas de horas, minutos y segundos con las velocidades
$$s_1=1,\qquad s_2=12,\qquad s_3=720,$$
entonces en el instante \(t\in[0,T)\) sus posiciones angulares son \(s_1t\), \(s_2t\) y \(s_3t\) módulo \(T\). Hay que contar los momentos en los que el patrón visible de tres puntos sobre la esfera es ambiguo, es decir, cuando la misma configuración observada puede explicarse con al menos dos asignaciones distintas de las etiquetas “hora”, “minuto” y “segundo”.
Las implementaciones en C++, Python y Java resuelven el problema permutación por permutación. Para cada reetiquetado no trivial, la geometría se convierte en un par de congruencias lineales y, a partir de ellas, en una rejilla finita de tiempos racionales candidatos.
Supongamos que la figura observada en el instante \(t\) también puede explicarse mediante otro instante \(\tau\) después de aplicar una permutación no identidad \(\pi\) a las etiquetas de las agujas. Como el patrón observado no lleva etiquetas, ambas descripciones pueden diferir por una rotación global \(r\). Por tanto,
$$s_i t \equiv s_{\pi(i)}\tau + r \pmod{T},\qquad i=1,2,3.$$
Al restar la primera ecuación de la segunda y de la tercera desaparece la rotación desconocida. Dado que
$$s_2-s_1=11,\qquad s_3-s_1=719,$$
obtenemos
$$11t \equiv \alpha_{\pi}\tau \pmod{T},\qquad 719t \equiv \beta_{\pi}\tau \pmod{T},$$
donde
$$\alpha_{\pi}=s_{\pi(2)}-s_{\pi(1)},\qquad \beta_{\pi}=s_{\pi(3)}-s_{\pi(1)}.$$
La ambigüedad geométrica queda así reducida a aritmética modular.
Multiplicamos la primera congruencia por \(\beta_{\pi}\) y la segunda por \(\alpha_{\pi}\), y luego restamos. El término con \(\tau\) desaparece:
$$\left(11\beta_{\pi}-719\alpha_{\pi}\right)t \equiv 0 \pmod{T}.$$
Definimos
$$\Delta_{\pi}=719\alpha_{\pi}-11\beta_{\pi},\qquad N_{\pi}=|\Delta_{\pi}|.$$
Entonces cualquier momento candidato debe satisfacer
$$\Delta_{\pi}t \equiv 0 \pmod{T},$$
y las soluciones dentro de \([0,T)\) son exactamente
$$t_n=\frac{Tn}{N_{\pi}},\qquad n=0,1,\dots,N_{\pi}-1.$$
Cada permutación produce, por tanto, un conjunto finito de instantes racionales en lugar de una búsqueda continua.
En las cinco permutaciones no triviales de este problema, \(\alpha_{\pi}\) y \(\beta_{\pi}\) son coprimos. Por ello existen enteros \(u_{\pi}\) y \(v_{\pi}\) tales que
$$u_{\pi}\beta_{\pi}+v_{\pi}\alpha_{\pi}=1.$$
Si multiplicamos \(11t\equiv \alpha_{\pi}\tau\pmod{T}\) por \(v_{\pi}\) y \(719t\equiv \beta_{\pi}\tau\pmod{T}\) por \(u_{\pi}\), y sumamos, obtenemos
$$\tau \equiv \lambda_{\pi} t \pmod{T},\qquad \lambda_{\pi}=11v_{\pi}+719u_{\pi}.$$
Como \(t=t_n=Tn/N_{\pi}\), el tiempo asociado también cae en la misma rejilla:
$$\tau=t_{n'},\qquad n' \equiv \lambda_{\pi}n \pmod{N_{\pi}}.$$
Un instante es realmente ambiguo para esa permutación si y solo si \(n'\ne n\). Los puntos fijos se descartan porque no generan una segunda interpretación distinta.
Un mismo instante real puede aparecer desde varias permutaciones, de modo que hace falta una deduplicación global. Partimos de
$$t_n=\frac{Tn}{N_{\pi}}.$$
Sea
$$g_0=\gcd(T,N_{\pi}),\qquad T_0=\frac{T}{g_0},\qquad N_0=\frac{N_{\pi}}{g_0}.$$
Entonces
$$t_n=\frac{T_0 n}{N_0}.$$
Si además reducimos por \(g=\gcd(n,N_0)\), queda la forma canónica
$$t_n=\frac{T_0(n/g)}{N_0/g}.$$
Guardar el par \(\left(T_0(n/g),\,N_0/g\right)\) garantiza que tiempos iguales procedentes de permutaciones distintas queden fusionados correctamente.
Tomemos la permutación que intercambia los papeles de hora y minuto y deja la aguja más rápida en tercer lugar. Entonces
$$\left(s_{\pi(1)},s_{\pi(2)},s_{\pi(3)}\right)=(12,1,720).$$
De aquí sale
$$\alpha_{\pi}=1-12=-11,\qquad \beta_{\pi}=720-12=708,$$
y por tanto
$$\Delta_{\pi}=719(-11)-11(708)=-15697,\qquad N_{\pi}=15697.$$
Una identidad de Bézout válida es
$$3\cdot 708 + 193\cdot(-11)=1,$$
así que podemos tomar \(u_{\pi}=3\) y \(v_{\pi}=193\). Esto da
$$\lambda_{\pi}\equiv 11\cdot 193 + 719\cdot 3 \equiv 4280 \pmod{15697}.$$
Los tiempos candidatos son entonces
$$t_n=\frac{43200n}{15697},\qquad \tau_n=\frac{43200\left(4280n\bmod 15697\right)}{15697}.$$
Para \(n=1\) obtenemos
$$t=\frac{43200}{15697}\approx 2.752118239\text{ s},\qquad \tau=\frac{43200\cdot 4280}{15697}\approx 11779.066063579\text{ s}.$$
Como \(4280\not\equiv 1\pmod{15697}\), se trata de un instante verdaderamente ambiguo. Las implementaciones repiten exactamente este razonamiento para las cinco permutaciones no triviales y luego eliminan solapamientos.
Las implementaciones en C++, Python y Java recorren las cinco permutaciones no identidad del triple de velocidades \((1,12,720)\). En cada una calculan las dos diferencias de velocidad, la magnitud \(N_{\pi}\) del determinante y un par de coeficientes de Bézout que permite transformar el índice \(n\) en su índice compañero \(n'\).
Después examinan todos los \(n\) con \(0\le n<N_{\pi}\), descartan los casos con \(n'=n\) y convierten cada tiempo superviviente \(Tn/N_{\pi}\) en una fracción reducida numerador-denominador. De este modo toda la comparación se hace con aritmética exacta, sin depender de tolerancias de coma flotante.
La versión en C++ acumula las fracciones y hace una ordenación con eliminación de duplicados al final. Las versiones en Python y Java usan estructuras de tipo conjunto para deduplicar al insertar. En todos los casos el algoritmo produce el mismo conjunto de momentos racionales y devuelve su cardinalidad.
Si \(N_{\pi}=|719\alpha_{\pi}-11\beta_{\pi}|\), el coste dominante es recorrer todos los índices \(n=0,\dots,N_{\pi}-1\) para las cinco permutaciones no triviales, es decir,
$$O\!\left(\sum_{\pi\ne\mathrm{id}} N_{\pi}\right).$$
Cada candidato requiere solo una cantidad constante de cálculos de gcd. Si tras descartar puntos fijos sobreviven \(M\) fracciones, la deduplicación cuesta \(O(M\log M)\) en la versión basada en ordenación y \(O(M)\) esperado en las versiones basadas en conjuntos. La memoria es \(O(M)\). Para este triple concreto de velocidades, la longitud total del barrido es \(2052026\), así que el método es perfectamente viable.
设 \(T=43200\) 表示一个完整的 12 小时周期,单位取秒。如果把时针、分针、秒针的角速度写成
$$s_1=1,\qquad s_2=12,\qquad s_3=720,$$
那么在任意时刻 \(t\in[0,T)\) 上,三根指针在圆盘上的位置分别是 \(s_1t\)、\(s_2t\)、\(s_3t\) 对 \(T\) 取模后的结果。题目要求统计那些“观测图形”有歧义的时刻:也就是说,同一个三点图形至少可以对应两种不同的“时针、分针、秒针”标签分配。
C++、Python 和 Java 三份实现都采用同一条思路:按非恒等置换逐个处理。对每一种重新贴标签的方式,先把几何条件化成线性同余方程,再把连续时间问题压缩成有限个有理数候选时刻。
设在时刻 \(t\) 观察到的图形,也可以被解释为另一个时刻 \(\tau\) 的图形,只不过三根指针的标签经过了一个非平凡置换 \(\pi\)。由于我们看到的是“无标签”的三点模式,两种解释之间允许存在一个整体转动量 \(r\)。因此有
$$s_i t \equiv s_{\pi(i)}\tau + r \pmod{T},\qquad i=1,2,3.$$
用第二式、第三式分别减去第一式,就可以把未知的整体旋转 \(r\) 消掉。因为
$$s_2-s_1=11,\qquad s_3-s_1=719,$$
所以得到
$$11t \equiv \alpha_{\pi}\tau \pmod{T},\qquad 719t \equiv \beta_{\pi}\tau \pmod{T},$$
其中
$$\alpha_{\pi}=s_{\pi(2)}-s_{\pi(1)},\qquad \beta_{\pi}=s_{\pi(3)}-s_{\pi(1)}.$$
到这一步为止,原来的钟面几何问题已经完全转成了模运算问题。
把第一条同余乘上 \(\beta_{\pi}\),第二条同余乘上 \(\alpha_{\pi}\),然后相减,\(\tau\) 项会被完全消去:
$$\left(11\beta_{\pi}-719\alpha_{\pi}\right)t \equiv 0 \pmod{T}.$$
定义
$$\Delta_{\pi}=719\alpha_{\pi}-11\beta_{\pi},\qquad N_{\pi}=|\Delta_{\pi}|.$$
于是每一个候选时刻都必须满足
$$\Delta_{\pi}t \equiv 0 \pmod{T}.$$
在区间 \([0,T)\) 中,这个条件的全部解恰好是
$$t_n=\frac{Tn}{N_{\pi}},\qquad n=0,1,\dots,N_{\pi}-1.$$
这一步很关键:它说明对固定置换而言,根本不需要在连续区间上搜索,只需要枚举一个有限的有理数网格即可。
对于本题的五个非恒等置换,\(\alpha_{\pi}\) 和 \(\beta_{\pi}\) 都互素,因此一定存在整数 \(u_{\pi},v_{\pi}\) 满足
$$u_{\pi}\beta_{\pi}+v_{\pi}\alpha_{\pi}=1.$$
现在把 \(11t\equiv \alpha_{\pi}\tau\pmod{T}\) 乘以 \(v_{\pi}\),把 \(719t\equiv \beta_{\pi}\tau\pmod{T}\) 乘以 \(u_{\pi}\),再把两式相加,就得到
$$\tau \equiv \lambda_{\pi} t \pmod{T},\qquad \lambda_{\pi}=11v_{\pi}+719u_{\pi}.$$
因为 \(t=t_n=Tn/N_{\pi}\),所以 \(\tau\) 也落在同一个离散网格上:
$$\tau=t_{n'},\qquad n' \equiv \lambda_{\pi}n \pmod{N_{\pi}}.$$
这意味着:对固定置换来说,一个候选时刻 \(t_n\) 真正有歧义,当且仅当对应的网格下标满足 \(n'\ne n\)。如果 \(n'=n\),那只是同一个解释映回自身,不算新的标签解释,因此要剔除。
同一个真实时刻有可能由多个不同置换同时产生,所以最后必须做全局去重。对某一个置换,候选时刻一开始写成
$$t_n=\frac{Tn}{N_{\pi}}.$$
先令
$$g_0=\gcd(T,N_{\pi}),\qquad T_0=\frac{T}{g_0},\qquad N_0=\frac{N_{\pi}}{g_0}.$$
于是
$$t_n=\frac{T_0 n}{N_0}.$$
再用 \(g=\gcd(n,N_0)\) 做一次约分,就得到标准形式
$$t_n=\frac{T_0(n/g)}{N_0/g}.$$
把 \(\left(T_0(n/g),\,N_0/g\right)\) 作为键保存,就能保证来自不同置换但代表同一时刻的结果最终只保留一份。
考虑这样一个置换:把第一根观察到的指针解释成分针,把第二根解释成时针,而第三根仍解释成最快的那根。也就是
$$\left(s_{\pi(1)},s_{\pi(2)},s_{\pi(3)}\right)=(12,1,720).$$
此时
$$\alpha_{\pi}=1-12=-11,\qquad \beta_{\pi}=720-12=708,$$
从而
$$\Delta_{\pi}=719(-11)-11(708)=-15697,\qquad N_{\pi}=15697.$$
一个方便的 Bézout 恒等式是
$$3\cdot 708 + 193\cdot(-11)=1,$$
所以可以取 \(u_{\pi}=3\)、\(v_{\pi}=193\)。于是
$$\lambda_{\pi}\equiv 11\cdot 193 + 719\cdot 3 \equiv 4280 \pmod{15697}.$$
这一支给出的候选时刻便是
$$t_n=\frac{43200n}{15697},\qquad \tau_n=\frac{43200\left(4280n\bmod 15697\right)}{15697}.$$
取 \(n=1\),得到
$$t=\frac{43200}{15697}\approx 2.752118239\text{ s},\qquad \tau=\frac{43200\cdot 4280}{15697}\approx 11779.066063579\text{ s}.$$
因为 \(4280\not\equiv 1\pmod{15697}\),所以这个时刻确实对应两种不同的标签解释。程序对另外四个非恒等置换执行完全相同的流程,再统一去重。
C++、Python 和 Java 的实现都会遍历速度三元组 \((1,12,720)\) 的五个非恒等置换。对每个置换,先算出两个速度差、行列式大小 \(N_{\pi}\),以及一个能把下标 \(n\) 映射到伙伴下标 \(n'\) 的 Bézout 系数组合。
随后程序枚举所有 \(0\le n<N_{\pi}\) 的情况,跳过满足 \(n'=n\) 的固定点,把其余的 \(Tn/N_{\pi}\) 统一化成最简分数的“分子-分母”对。这样整个流程只使用整数与 gcd 运算,不需要任何浮点近似或容差判断。
C++ 版本先收集全部候选,再做排序和去重;Python 与 Java 版本则利用集合结构在插入时去重。虽然存储细节不同,但三份实现枚举出的有理时刻集合完全一致,最后输出的就是这个集合的大小。
记 \(N_{\pi}=|719\alpha_{\pi}-11\beta_{\pi}|\)。主成本是对五个非恒等置换分别枚举 \(n=0,\dots,N_{\pi}-1\),因此总扫描代价为
$$O\!\left(\sum_{\pi\ne\mathrm{id}} N_{\pi}\right).$$
每个候选只需要常数次 gcd 计算。若固定点过滤后留下 \(M\) 个候选分数,那么基于排序的去重成本为 \(O(M\log M)\),基于集合的去重期望成本为 \(O(M)\),空间复杂度都是 \(O(M)\)。对本题这组三个速度而言,总枚举长度是 \(2052026\),因此该方法在实际运行中非常轻量。
Пусть \(T=43200\) обозначает полный 12-часовой цикл в секундах. Если моделировать часовую, минутную и секундную стрелки скоростями
$$s_1=1,\qquad s_2=12,\qquad s_3=720,$$
то в момент \(t\in[0,T)\) их угловые положения равны \(s_1t\), \(s_2t\) и \(s_3t\) по модулю \(T\). Нужно посчитать такие моменты времени, когда видимая конфигурация из трёх точек на циферблате неоднозначна: один и тот же рисунок допускает как минимум две разные интерпретации того, какая стрелка является часовой, минутной и секундной.
Реализации на C++, Python и Java рассматривают задачу по одной перестановке за раз. Для каждой нетривиальной перестановки геометрическое условие переводится в систему линейных сравнений, а затем сводится к конечной решётке рациональных моментов времени.
Предположим, что картина, увиденная в момент \(t\), может быть объяснена и другим моментом \(\tau\), если переименовать стрелки по нетождественной перестановке \(\pi\). Поскольку наблюдаемый рисунок не содержит меток, две интерпретации могут отличаться на общий поворот \(r\). Поэтому
$$s_i t \equiv s_{\pi(i)}\tau + r \pmod{T},\qquad i=1,2,3.$$
Вычитая первое сравнение из второго и третьего, устраняем неизвестный поворот. Так как
$$s_2-s_1=11,\qquad s_3-s_1=719,$$
получаем
$$11t \equiv \alpha_{\pi}\tau \pmod{T},\qquad 719t \equiv \beta_{\pi}\tau \pmod{T},$$
где
$$\alpha_{\pi}=s_{\pi(2)}-s_{\pi(1)},\qquad \beta_{\pi}=s_{\pi(3)}-s_{\pi(1)}.$$
Тем самым вся геометрия задачи переходит в язык модульной арифметики.
Умножим первое сравнение на \(\beta_{\pi}\), второе на \(\alpha_{\pi}\) и вычтем одно из другого. Переменная \(\tau\) исчезает:
$$\left(11\beta_{\pi}-719\alpha_{\pi}\right)t \equiv 0 \pmod{T}.$$
Определим
$$\Delta_{\pi}=719\alpha_{\pi}-11\beta_{\pi},\qquad N_{\pi}=|\Delta_{\pi}|.$$
Тогда любой допустимый момент обязан удовлетворять условию
$$\Delta_{\pi}t \equiv 0 \pmod{T},$$
а все решения на отрезке \([0,T)\) имеют вид
$$t_n=\frac{Tn}{N_{\pi}},\qquad n=0,1,\dots,N_{\pi}-1.$$
Значит, каждая перестановка даёт не непрерывный поиск, а конечное множество рациональных кандидатов.
Для всех пяти нетривиальных перестановок в этой задаче числа \(\alpha_{\pi}\) и \(\beta_{\pi}\) взаимно просты. Следовательно, существуют целые \(u_{\pi}\) и \(v_{\pi}\), такие что
$$u_{\pi}\beta_{\pi}+v_{\pi}\alpha_{\pi}=1.$$
Умножим сравнение \(11t\equiv \alpha_{\pi}\tau\pmod{T}\) на \(v_{\pi}\), а сравнение \(719t\equiv \beta_{\pi}\tau\pmod{T}\) на \(u_{\pi}\), после чего сложим. Тогда получаем
$$\tau \equiv \lambda_{\pi} t \pmod{T},\qquad \lambda_{\pi}=11v_{\pi}+719u_{\pi}.$$
Поскольку \(t=t_n=Tn/N_{\pi}\), альтернативный момент лежит на той же сетке:
$$\tau=t_{n'},\qquad n' \equiv \lambda_{\pi}n \pmod{N_{\pi}}.$$
Момент действительно неоднозначен для данной перестановки тогда и только тогда, когда \(n'\ne n\). Фиксированные точки отбрасываются, потому что они не создают вторую отличную интерпретацию.
Один и тот же реальный момент может появиться у разных перестановок, поэтому требуется глобальное устранение дублей. Исходная запись такова:
$$t_n=\frac{Tn}{N_{\pi}}.$$
Пусть
$$g_0=\gcd(T,N_{\pi}),\qquad T_0=\frac{T}{g_0},\qquad N_0=\frac{N_{\pi}}{g_0}.$$
Тогда
$$t_n=\frac{T_0 n}{N_0}.$$
Если затем сократить ещё на \(g=\gcd(n,N_0)\), получим канонический вид
$$t_n=\frac{T_0(n/g)}{N_0/g}.$$
Хранение пары \(\left(T_0(n/g),\,N_0/g\right)\) гарантирует, что одинаковые моменты, пришедшие из разных перестановок, будут объединены корректно.
Рассмотрим перестановку, которая меняет местами роли часовой и минутной стрелок, а самую быструю стрелку оставляет третьей. Тогда
$$\left(s_{\pi(1)},s_{\pi(2)},s_{\pi(3)}\right)=(12,1,720).$$
Отсюда
$$\alpha_{\pi}=1-12=-11,\qquad \beta_{\pi}=720-12=708,$$
а значит
$$\Delta_{\pi}=719(-11)-11(708)=-15697,\qquad N_{\pi}=15697.$$
Подходящая тождественность Бéзуа имеет вид
$$3\cdot 708 + 193\cdot(-11)=1,$$
поэтому можно взять \(u_{\pi}=3\) и \(v_{\pi}=193\). Тогда
$$\lambda_{\pi}\equiv 11\cdot 193 + 719\cdot 3 \equiv 4280 \pmod{15697}.$$
Сетка кандидатов и соответствующих партнёров равна
$$t_n=\frac{43200n}{15697},\qquad \tau_n=\frac{43200\left(4280n\bmod 15697\right)}{15697}.$$
При \(n=1\) получаем
$$t=\frac{43200}{15697}\approx 2.752118239\text{ s},\qquad \tau=\frac{43200\cdot 4280}{15697}\approx 11779.066063579\text{ s}.$$
Так как \(4280\not\equiv 1\pmod{15697}\), это настоящий неоднозначный момент. Точно такой же расчёт выполняется для остальных четырёх нетривиальных перестановок.
Реализации на C++, Python и Java перебирают пять нетождественных перестановок скоростей \((1,12,720)\). Для каждой из них вычисляются две разности скоростей, величина \(N_{\pi}\) и пара коэффициентов Бéзуа, позволяющая переводить индекс \(n\) в связанный индекс \(n'\).
После этого программа просматривает все значения \(0\le n<N_{\pi}\), пропускает фиксированные точки с \(n'=n\) и переводит оставшееся время \(Tn/N_{\pi}\) в сокращённую пару числитель-знаменатель. Благодаря этому сравнение выполняется строго в целочисленной арифметике, без численных погрешностей.
Версия на C++ сначала собирает все дроби, а затем делает сортировку и удаление дублей. Версии на Python и Java используют структуры наподобие множеств и устраняют повторы при вставке. Несмотря на различие в контейнерах, все три реализации перечисляют один и тот же набор рациональных моментов и возвращают его размер.
Пусть \(N_{\pi}=|719\alpha_{\pi}-11\beta_{\pi}|\). Основная стоимость состоит в переборе всех индексов \(n=0,\dots,N_{\pi}-1\) по пяти нетривиальным перестановкам, то есть
$$O\!\left(\sum_{\pi\ne\mathrm{id}} N_{\pi}\right).$$
На каждый кандидат приходится лишь константное число вычислений gcd. Если после фильтрации фиксированных точек остаётся \(M\) дробей, то финальная дедупликация требует \(O(M\log M)\) в сортировочном варианте и ожидаемое \(O(M)\) в вариантах на множествах. Память составляет \(O(M)\). Для данного набора скоростей суммарная длина просмотра равна \(2052026\), поэтому метод работает с большим запасом.
لنفرض أن \(T=43200\) يمثّل دورة كاملة مقدارها 12 ساعة مقاسة بالثواني. إذا مثّلنا عقرب الساعات والدقائق والثواني بسرعات
$$s_1=1,\qquad s_2=12,\qquad s_3=720,$$
فإن مواضعها الزاوية عند الزمن \(t\in[0,T)\) هي \(s_1t\) و\(s_2t\) و\(s_3t\) بترديد \(T\). المطلوب هو عدّ الأزمنة التي يكون فيها النمط المرئي المكوّن من ثلاث نقاط على القرص ملتبسًا، أي إن الصورة نفسها يمكن أن تُفسَّر على أنها ناتجة عن أكثر من إسناد واحد لتسميات «عقرب الساعات» و«عقرب الدقائق» و«عقرب الثواني».
تعالج تطبيقات C++ وPython وJava المسألة تبديلًا بعد تبديل. ولكل تبديل غير مطابق، تتحول الهندسة إلى زوج من التوافقات الخطية، ثم ينكمش البحث كله إلى شبكة منتهية من الأزمنة الكسرية المرشحة.
افترض أن الصورة المرصودة عند الزمن \(t\) يمكن أيضًا تفسيرها بواسطة زمن آخر \(\tau\) بعد تطبيق تبديل غير مطابق \(\pi\) على تسميات العقارب. وبما أن النمط المرئي غير معنون، فمن المسموح أن يختلف التفسيران بدوران عام مقداره \(r\). عندئذٍ
$$s_i t \equiv s_{\pi(i)}\tau + r \pmod{T},\qquad i=1,2,3.$$
بطرح المعادلة الأولى من المعادلتين الثانية والثالثة يختفي مقدار الدوران المجهول. ولأن
$$s_2-s_1=11,\qquad s_3-s_1=719,$$
فنحصل على
$$11t \equiv \alpha_{\pi}\tau \pmod{T},\qquad 719t \equiv \beta_{\pi}\tau \pmod{T},$$
حيث
$$\alpha_{\pi}=s_{\pi(2)}-s_{\pi(1)},\qquad \beta_{\pi}=s_{\pi(3)}-s_{\pi(1)}.$$
وهكذا تتحول فكرة «التباس شكل الساعة» إلى مسألة في الحساب المعياري فقط.
نضرب التوافق الأول في \(\beta_{\pi}\) والثاني في \(\alpha_{\pi}\)، ثم نطرح فنزيل \(\tau\) تمامًا:
$$\left(11\beta_{\pi}-719\alpha_{\pi}\right)t \equiv 0 \pmod{T}.$$
لنعرّف
$$\Delta_{\pi}=719\alpha_{\pi}-11\beta_{\pi},\qquad N_{\pi}=|\Delta_{\pi}|.$$
إذن كل زمن مرشح يجب أن يحقق
$$\Delta_{\pi}t \equiv 0 \pmod{T}.$$
وجميع الحلول داخل المجال \([0,T)\) هي بالضبط
$$t_n=\frac{Tn}{N_{\pi}},\qquad n=0,1,\dots,N_{\pi}-1.$$
أي إن كل تبديل يعطينا مجموعة منتهية من الأزمنة النسبية، بدلًا من بحث متصل على كامل الفترة.
في جميع التبديلات الخمسة غير المطابقة في هذه المسألة، يكون العددان \(\alpha_{\pi}\) و\(\beta_{\pi}\) أوليين نسبيًا. لذلك توجد أعداد صحيحة \(u_{\pi}\) و\(v_{\pi}\) تحقق
$$u_{\pi}\beta_{\pi}+v_{\pi}\alpha_{\pi}=1.$$
إذا ضربنا التوافق \(11t\equiv \alpha_{\pi}\tau\pmod{T}\) في \(v_{\pi}\)، وضربنا التوافق \(719t\equiv \beta_{\pi}\tau\pmod{T}\) في \(u_{\pi}\)، ثم جمعنا، فسنحصل على
$$\tau \equiv \lambda_{\pi} t \pmod{T},\qquad \lambda_{\pi}=11v_{\pi}+719u_{\pi}.$$
وبما أن \(t=t_n=Tn/N_{\pi}\)، فإن الزمن الموافق للتفسير الآخر يقع على الشبكة نفسها:
$$\tau=t_{n'},\qquad n' \equiv \lambda_{\pi}n \pmod{N_{\pi}}.$$
إذن يكون الزمن ملتبسًا حقًا بالنسبة إلى هذا التبديل إذا وفقط إذا تحقق \(n'\ne n\). أما النقاط الثابتة فليست تفسيرًا ثانيًا مميزًا، ولذلك تُستبعد.
قد يظهر الزمن الحقيقي نفسه من أكثر من تبديل، لذا نحتاج إلى إزالة التكرار على المستوى الكلي. نبدأ من
$$t_n=\frac{Tn}{N_{\pi}}.$$
ولنضع
$$g_0=\gcd(T,N_{\pi}),\qquad T_0=\frac{T}{g_0},\qquad N_0=\frac{N_{\pi}}{g_0}.$$
عندئذٍ
$$t_n=\frac{T_0 n}{N_0}.$$
ثم نختزل مرة أخرى بواسطة \(g=\gcd(n,N_0)\)، فنصل إلى الصورة القياسية
$$t_n=\frac{T_0(n/g)}{N_0/g}.$$
وتخزين الزوج \(\left(T_0(n/g),\,N_0/g\right)\) يضمن أن الأزمنة المتساوية القادمة من تبديلات مختلفة ستُدمج بصورة صحيحة.
لنأخذ التبديل الذي يبدل بين دوري الساعات والدقائق ويُبقي أسرع عقرب في الموضع الثالث، أي
$$\left(s_{\pi(1)},s_{\pi(2)},s_{\pi(3)}\right)=(12,1,720).$$
حينها
$$\alpha_{\pi}=1-12=-11,\qquad \beta_{\pi}=720-12=708,$$
ومن ثم
$$\Delta_{\pi}=719(-11)-11(708)=-15697,\qquad N_{\pi}=15697.$$
إحدى هويات بéزوت المناسبة هي
$$3\cdot 708 + 193\cdot(-11)=1,$$
ومن ثم يمكن أخذ \(u_{\pi}=3\) و\(v_{\pi}=193\). وهذا يعطي
$$\lambda_{\pi}\equiv 11\cdot 193 + 719\cdot 3 \equiv 4280 \pmod{15697}.$$
فتصبح الأزمنة المرشحة
$$t_n=\frac{43200n}{15697},\qquad \tau_n=\frac{43200\left(4280n\bmod 15697\right)}{15697}.$$
وعند \(n=1\) نحصل على
$$t=\frac{43200}{15697}\approx 2.752118239\text{ s},\qquad \tau=\frac{43200\cdot 4280}{15697}\approx 11779.066063579\text{ s}.$$
وبما أن \(4280\not\equiv 1\pmod{15697}\)، فهذا مثال فعلي على لحظة ملتبسة. وتكرر التطبيقات هذه العملية نفسها مع التبديلات الأربعة غير المطابقة الأخرى ثم تزيل التداخل بينها.
تجتاز تطبيقات C++ وPython وJava التبديلات الخمسة غير المطابقة للثلاثي \((1,12,720)\). وفي كل حالة تحسب فرقَي السرعة، ومقدار المحدد \(N_{\pi}\)، وزوجًا من معاملات بéزوت يسمح باشتقاق الفهرس الشريك \(n'\) من الفهرس \(n\).
بعد ذلك تُفحَص جميع القيم \(0\le n<N_{\pi}\). تُهمَل الحالات التي تحقق \(n'=n\)، ثم يُحوَّل كل زمن باقٍ من الصورة \(Tn/N_{\pi}\) إلى زوج مختزل من البسط والمقام. وبهذا تبقى جميع المقارنات دقيقة تمامًا داخل الحساب الصحيح، من دون أي اعتماد على التقريب العشري.
نسخة C++ تجمع جميع الكسور ثم تُجري فرزًا يتبعه حذف للتكرارات في النهاية، بينما تستخدم نسختا Python وJava بنى شبيهة بالمجموعات لإزالة التكرار أثناء الإدراج. وعلى الرغم من اختلاف أسلوب التخزين، فإن التطبيقات الثلاثة تعدّد المجموعة نفسها من الأزمنة الكسرية وتعيد حجمها النهائي.
إذا كتبنا \(N_{\pi}=|719\alpha_{\pi}-11\beta_{\pi}|\)، فإن الكلفة الأساسية هي تعداد جميع الفهارس \(n=0,\dots,N_{\pi}-1\) عبر التبديلات الخمسة غير المطابقة، أي
$$O\!\left(\sum_{\pi\ne\mathrm{id}} N_{\pi}\right).$$
كل مرشح يحتاج فقط إلى عدد ثابت من حسابات gcd. وإذا بقي \(M\) مرشحًا بعد حذف النقاط الثابتة، فإن إزالة التكرار تكلف \(O(M\log M)\) في النسخة المعتمدة على الفرز، و\(O(M)\) في المتوسط في النسخ المعتمدة على المجموعات، مع استهلاك ذاكرة مقداره \(O(M)\). وبالنسبة إلى ثلاثي السرعات هنا فإن طول المسح الكلي يساوي \(2052026\)، لذلك فالطريقة عملية جدًا.