An infinite digit stream repeats
$$1,2,3,4,3,2,1,2,3,4,3,2,\dots$$
The stream is continuous: after \(v_n\) is built, the next term starts exactly where the previous one stopped. For each positive integer \(n\), \(v_n\) is the decimal integer obtained by concatenating successive digits until their digit-sum is exactly \(n\). The first terms are
$$v_1=1,\quad v_2=2,\quad v_3=3,\quad v_4=4,\quad v_5=32,\quad v_6=123,\dots$$
The goal is to compute
$$S(N)=\sum_{n=1}^{N} v_n \pmod{123454321}$$
for an enormous value of \(N\). A direct simulation would require producing every term one after another, so the solution must exploit the periodicity of the digit stream and the arithmetic structure of the digit sums.
The decisive observation is that the sequence does not need to be handled term by term forever. Once the terms are grouped by their residue class modulo \(15\), each group follows a simple affine recurrence.
After the first \(m\) terms have been completed, the total digit-sum consumed from the stream is
$$A_m=1+2+\cdots+m=\frac{m(m+1)}{2}.$$
One complete clock cycle uses the six digits \(1,2,3,4,3,2\), whose sum is
$$1+2+3+4+3+2=15.$$
The partial sums inside one cycle are \(0,1,3,6,10,13,15\), and these are all distinct modulo \(15\). Therefore the position inside the six-digit cycle is determined by the consumed digit-sum modulo \(15\).
The term \(v_n\) starts after the first \(n-1\) terms, so its starting position depends on \(A_{n-1}\). Now
$$A_{n+14}-A_{n-1}=\frac{(n+14)(n+15)-(n-1)n}{2}=15(n+7),$$
which is divisible by \(15\). Hence \(v_n\) and \(v_{n+15}\) always start at the same point of the repeating digit stream. This is why the natural classification is by \(n \bmod 15\).
Fix a residue \(r \in \{1,\dots,15\}\) and write
$$n=r+15k.$$
The terms \(v_r,v_{r+15},v_{r+30},\dots\) all start at the same stream position. Their target digit-sums differ by \(15\), and the next complete cycle from any fixed position contains exactly six digits whose sum is \(15\). Therefore, once \(v_{r+15k}\) has been read, the term \(v_{r+15(k+1)}\) is obtained by appending one more six-digit rotation of the clock sequence.
If \(B=10^6\), appending six decimal digits multiplies the previous number by \(B\). So there exist constants \(b_r\) and \(a_r\), depending only on the residue class \(r\), such that
$$b_r=v_r,$$
$$v_{r+15(k+1)}=B\,v_{r+15k}+a_r.$$
The quantity \(a_r\) is the six-digit block appended in that residue class.
The recurrence
$$x_{k+1}=B\,x_k+a_r,\qquad x_0=b_r$$
has the closed form
$$x_k=b_r B^k+a_r\sum_{j=0}^{k-1}B^j.$$
Therefore
$$v_{r+15k}=b_r B^k+a_r\frac{B^k-1}{B-1}.$$
This formula is exact over the integers and is the core reason the huge input becomes manageable.
For a fixed residue \(r\), the number of indices of the form \(r+15k\) that do not exceed \(N\) is
$$K_r=\left\lfloor\frac{N-r}{15}\right\rfloor+1 \qquad (N \ge r).$$
Define the two standard sums
$$P(K)=\sum_{k=0}^{K-1} B^k=\frac{B^K-1}{B-1},$$
$$Q(K)=\sum_{k=0}^{K-1}\frac{B^k-1}{B-1}=\frac{P(K)-K}{B-1}.$$
Then the total contribution of residue class \(r\) is
$$\sum_{k=0}^{K_r-1} v_{r+15k}=b_r P(K_r)+a_r Q(K_r).$$
Summing over all possible residues gives
$$S(N)=\sum_{r=1}^{\min(15,N)}\left(b_r P(K_r)+a_r Q(K_r)\right)\pmod{123454321}.$$
The implementation works modulo
$$M=123454321.$$
Since
$$\gcd(B-1,M)=\gcd(999999,123454321)=1,$$
the factor \(B-1\) has a modular inverse modulo \(M\). Thus the divisions in \(P(K)\) and \(Q(K)\) are carried out safely as multiplications by \((B-1)^{-1} \pmod{M}\), while \(B^K \pmod{M}\) is obtained by fast exponentiation.
The exact terms in this class begin as
$$v_5=32,\qquad v_{20}=32123432,\qquad v_{35}=32123432123432.$$
Therefore
$$a_5=v_{20}-10^6 v_5=32123432-32000000=123432.$$
The closed form becomes
$$v_{5+15k}=32 \cdot 10^{6k}+123432\frac{10^{6k}-1}{10^6-1}.$$
For \(k=2\), this gives
$$32 \cdot 10^{12}+123432(10^6+1)=32123432123432,$$
which matches the third exact term. As a small full-sequence checkpoint, the first eleven terms satisfy
$$S(11)=36120.$$
The C++, Python, and Java implementations first generate the first \(45\) terms exactly. That is enough to obtain three terms from each residue class modulo \(15\): \(v_r\), \(v_{r+15}\), and \(v_{r+30}\).
From these values, the implementation extracts the initial value \(b_r=v_r\) and the appended six-digit block
$$a_r=v_{r+15}-10^6 v_r.$$
It then checks that the same block also satisfies
$$v_{r+30}=10^6 v_{r+15}+a_r,$$
so the affine law is verified before the large-\(N\) computation begins.
After that, the program uses fast modular exponentiation to evaluate \(B^{K_r} \pmod{M}\), computes the modular inverse of \(B-1\), forms \(P(K_r)\) and \(Q(K_r)\) modulo \(M\), and accumulates the \(15\) residue-class contributions. The exact prefix generation is only a fixed-size calibration step; the enormous target \(N\) is handled entirely by closed forms.
Generating the first \(45\) exact terms is constant work. The main computation processes only \(15\) residue classes, and each class requires a constant number of modular operations plus one modular exponentiation \(B^{K_r}\). Therefore the total running time is
$$O(\log N),$$
and the memory usage is
$$O(1).$$
Es gibt einen unendlichen periodischen Ziffernstrom
$$1,2,3,4,3,2,1,2,3,4,3,2,\dots$$
Der Strom wird nicht zurückgesetzt: Nachdem \(v_n\) konstruiert wurde, beginnt \(v_{n+1}\) genau an der Stelle, an der \(v_n\) endete. Für jedes positive \(n\) ist \(v_n\) die Dezimalzahl, die durch Konkatenation aufeinanderfolgender Ziffern entsteht, bis ihre Ziffernsumme genau \(n\) beträgt. Die ersten Werte sind
$$v_1=1,\quad v_2=2,\quad v_3=3,\quad v_4=4,\quad v_5=32,\quad v_6=123,\dots$$
Gesucht ist
$$S(N)=\sum_{n=1}^{N} v_n \pmod{123454321}$$
für ein riesiges \(N\). Direkte Simulation wäre linear in \(N\) und damit unpraktisch. Deshalb muss man die Periodizität des Ziffernstroms und die arithmetische Struktur der Ziffernsummen ausnutzen.
Der entscheidende Schritt ist, die Folge nach Restklassen modulo \(15\) zu zerlegen. Innerhalb jeder Restklasse gehorchen die Terme dann einer einfachen affinen Rekursion.
Nach den ersten \(m\) Termen wurde insgesamt die Ziffernsumme
$$A_m=1+2+\cdots+m=\frac{m(m+1)}{2}$$
aus dem Strom verbraucht. Ein vollständiger Zyklus enthält die sechs Ziffern \(1,2,3,4,3,2\) und hat Summe
$$1+2+3+4+3+2=15.$$
Die Präfixsummen innerhalb eines Zyklus sind \(0,1,3,6,10,13,15\) und alle verschieden modulo \(15\). Damit ist die Position innerhalb des Sechserzyklus eindeutig durch die verbrauchte Ziffernsumme modulo \(15\) bestimmt.
Der Term \(v_n\) beginnt nach den ersten \(n-1\) Termen, also hängt seine Startposition von \(A_{n-1}\) ab. Nun gilt
$$A_{n+14}-A_{n-1}=\frac{(n+14)(n+15)-(n-1)n}{2}=15(n+7),$$
also ein Vielfaches von \(15\). Deshalb starten \(v_n\) und \(v_{n+15}\) immer an derselben Stelle des periodischen Stroms. Genau daher ist die Zerlegung nach \(n \bmod 15\) natürlich.
Fixiere \(r \in \{1,\dots,15\}\) und schreibe
$$n=r+15k.$$
Die Terme \(v_r,v_{r+15},v_{r+30},\dots\) haben dieselbe Startposition. Ihre Ziel-Ziffernsummen unterscheiden sich um \(15\), und der nächste vollständige Zyklus ab jeder festen Position besteht aus genau sechs Ziffern mit Summe \(15\). Daher entsteht \(v_{r+15(k+1)}\) aus \(v_{r+15k}\), indem genau eine weitere gedrehte Sechserperiode angehängt wird.
Mit \(B=10^6\) bedeutet das Dezimal-Anhängen von sechs Ziffern eine Multiplikation mit \(B\). Also existieren Konstanten \(b_r\) und \(a_r\), die nur von der Restklasse abhängen, sodass
$$b_r=v_r,$$
$$v_{r+15(k+1)}=B\,v_{r+15k}+a_r.$$
Die Größe \(a_r\) ist genau der angehängte Sechserblock dieser Restklasse.
Für
$$x_{k+1}=B\,x_k+a_r,\qquad x_0=b_r$$
erhält man
$$x_k=b_r B^k+a_r\sum_{j=0}^{k-1}B^j.$$
Damit folgt
$$v_{r+15k}=b_r B^k+a_r\frac{B^k-1}{B-1}.$$
Diese geschlossene Formel gilt exakt über den ganzen Zahlen und macht den Sprung zu extrem großen Indizes erst möglich.
Für eine feste Restklasse \(r\) ist die Anzahl der Indizes der Form \(r+15k\), die höchstens \(N\) sind, gleich
$$K_r=\left\lfloor\frac{N-r}{15}\right\rfloor+1 \qquad (N \ge r).$$
Definiere
$$P(K)=\sum_{k=0}^{K-1} B^k=\frac{B^K-1}{B-1},$$
$$Q(K)=\sum_{k=0}^{K-1}\frac{B^k-1}{B-1}=\frac{P(K)-K}{B-1}.$$
Dann ist der Beitrag der Restklasse \(r\)
$$\sum_{k=0}^{K_r-1} v_{r+15k}=b_r P(K_r)+a_r Q(K_r).$$
Insgesamt also
$$S(N)=\sum_{r=1}^{\min(15,N)}\left(b_r P(K_r)+a_r Q(K_r)\right)\pmod{123454321}.$$
Gerechnet wird modulo
$$M=123454321.$$
Da
$$\gcd(B-1,M)=\gcd(999999,123454321)=1,$$
besitzt \(B-1\) ein multiplikatives Inverses modulo \(M\). Die Divisionen in \(P(K)\) und \(Q(K)\) werden daher als Multiplikationen mit \((B-1)^{-1} \pmod{M}\) ausgeführt, und \(B^K \pmod{M}\) wird per schneller Exponentiation berechnet.
Die ersten exakten Terme dieser Klasse sind
$$v_5=32,\qquad v_{20}=32123432,\qquad v_{35}=32123432123432.$$
Daher ist
$$a_5=v_{20}-10^6 v_5=32123432-32000000=123432.$$
Also lautet die geschlossene Form
$$v_{5+15k}=32 \cdot 10^{6k}+123432\frac{10^{6k}-1}{10^6-1}.$$
Für \(k=2\) ergibt sich
$$32 \cdot 10^{12}+123432(10^6+1)=32123432123432,$$
genau der beobachtete dritte Term. Als kleiner Gesamttest gilt außerdem
$$S(11)=36120.$$
Die C++-, Python- und Java-Implementierungen erzeugen zunächst die ersten \(45\) Terme exakt. Das liefert für jede der \(15\) Restklassen drei Werte: \(v_r\), \(v_{r+15}\) und \(v_{r+30}\).
Aus den ersten beiden wird der Startwert \(b_r=v_r\) sowie der Sechserblock
$$a_r=v_{r+15}-10^6 v_r$$
bestimmt. Anschließend wird mit dem dritten Wert überprüft, dass tatsächlich
$$v_{r+30}=10^6 v_{r+15}+a_r$$
gilt. Erst danach beginnt die eigentliche Großrechnung.
Für das große \(N\) benutzt die Implementierung schnelle modulare Exponentiation für \(B^{K_r} \pmod{M}\), berechnet das Inverse von \(B-1\) modulo \(M\), setzt daraus \(P(K_r)\) und \(Q(K_r)\) zusammen und summiert die \(15\) Restklassenbeiträge auf. Die exakte Präfixphase ist also nur eine feste Kalibrierung; der eigentliche Großteil der Arbeit besteht aus geschlossenen Formeln.
Das Erzeugen der ersten \(45\) exakten Terme kostet nur konstante Zeit. Danach werden lediglich \(15\) Restklassen verarbeitet, und pro Klasse fallen konstant viele modulare Operationen sowie eine modulare Potenz \(B^{K_r}\) an. Insgesamt ergibt sich daher
$$O(\log N)$$
Zeit und
$$O(1)$$
Speicher.
Sonsuz rakam akışı şu döngüyü tekrar eder:
$$1,2,3,4,3,2,1,2,3,4,3,2,\dots$$
Akış sıfırlanmaz; \(v_n\) üretildikten sonra bir sonraki terim tam kaldığı yerden devam eder. Her pozitif \(n\) için \(v_n\), ardışık rakamlar yan yana yazıldığında rakam toplamı tam \(n\) olunca duran onluk sayıdır. İlk terimler
$$v_1=1,\quad v_2=2,\quad v_3=3,\quad v_4=4,\quad v_5=32,\quad v_6=123,\dots$$
şeklindedir. İstenen değer
$$S(N)=\sum_{n=1}^{N} v_n \pmod{123454321}$$
olup \(N\) çok büyüktür. Doğrudan simülasyon tüm terimleri tek tek üretmek zorunda kalacağı için işe yaramaz; çözüm periyodik yapıyı cebirsel biçime dönüştürmelidir.
Kilit fikir, terimleri \(15\) ile bölümünden kalanlara ayırmaktır. Aynı artık sınıfındaki terimler, sabit katsayılı basit bir afin bağıntı izler.
İlk \(m\) terim tamamlandıktan sonra akıştan tüketilen toplam rakam toplamı
$$A_m=1+2+\cdots+m=\frac{m(m+1)}{2}$$
olur. Bir tam saat döngüsü altı rakamdan oluşur ve toplamı
$$1+2+3+4+3+2=15$$
eder. Tek bir döngü içindeki kısmi toplamlar \(0,1,3,6,10,13,15\) olduğundan bunların hepsi \(15\) modunda birbirinden farklıdır. Bu yüzden döngü içindeki konum, tüketilmiş toplamın \(15\) moduna göre kalanı ile belirlenir.
\(v_n\) terimi, ilk \(n-1\) terimden sonra başladığı için başlangıç konumu \(A_{n-1}\)'e bağlıdır. Şimdi
$$A_{n+14}-A_{n-1}=\frac{(n+14)(n+15)-(n-1)n}{2}=15(n+7)$$
olduğu için bu fark \(15\)'in katıdır. Demek ki \(v_n\) ile \(v_{n+15}\) her zaman aynı akış konumundan başlar. Bu nedenle doğal sınıflandırma \(n \bmod 15\) üzerindedir.
\(r \in \{1,\dots,15\}\) sabit olsun ve
$$n=r+15k$$
yazalım. \(v_r,v_{r+15},v_{r+30},\dots\) terimlerinin başlangıç konumu aynıdır. Hedef rakam toplamları arasında \(15\) fark vardır ve sabit bir konumdan sonraki tam döngü tam altı rakam içerip toplamda \(15\) eder. Bu nedenle \(v_{r+15(k+1)}\), \(v_{r+15k}\)'nin sonuna bir adet dönmüş altılı blok eklenmesiyle oluşur.
\(B=10^6\) alırsak, altı onluk basamak eklemek önceki sayıyı \(B\) ile çarpmak demektir. Dolayısıyla yalnızca artık sınıfa bağlı \(b_r\) ve \(a_r\) sabitleri vardır ve
$$b_r=v_r,$$
$$v_{r+15(k+1)}=B\,v_{r+15k}+a_r$$
eşitliği geçerlidir. Burada \(a_r\), o sınıfta eklenen altı rakamlık kuyruktur.
Şimdi aynı sınıftaki terimleri kapalı formda yazalım.
$$x_{k+1}=B\,x_k+a_r,\qquad x_0=b_r$$
için çözüm
$$x_k=b_r B^k+a_r\sum_{j=0}^{k-1}B^j$$
olur. Dolayısıyla
$$v_{r+15k}=b_r B^k+a_r\frac{B^k-1}{B-1}.$$
Bu formül tam sayı düzeyinde doğrudur ve asıl hızlanma buradan gelir.
Sabit bir \(r\) için, \(N\)'i geçmeyen \(r+15k\) biçimindeki terim sayısı
$$K_r=\left\lfloor\frac{N-r}{15}\right\rfloor+1 \qquad (N \ge r)$$
olur. Şimdi
$$P(K)=\sum_{k=0}^{K-1} B^k=\frac{B^K-1}{B-1},$$
$$Q(K)=\sum_{k=0}^{K-1}\frac{B^k-1}{B-1}=\frac{P(K)-K}{B-1}$$
tanımlarını yapalım. O zaman \(r\) sınıfının katkısı
$$\sum_{k=0}^{K_r-1} v_{r+15k}=b_r P(K_r)+a_r Q(K_r)$$
olur. Sonuçta
$$S(N)=\sum_{r=1}^{\min(15,N)}\left(b_r P(K_r)+a_r Q(K_r)\right)\pmod{123454321}.$$
Hesaplar
$$M=123454321$$
modunda yapılır. Ayrıca
$$\gcd(B-1,M)=\gcd(999999,123454321)=1$$
olduğu için \(B-1\)'in modüler tersi vardır. Böylece \(P(K)\) ve \(Q(K)\) içindeki bölmeler, \((B-1)^{-1} \pmod{M}\) ile çarpım olarak uygulanır; \(B^K \pmod{M}\) ise hızlı üs alma ile bulunur.
Bu sınıftaki ilk tam terimler
$$v_5=32,\qquad v_{20}=32123432,\qquad v_{35}=32123432123432$$
şeklindedir. Buradan
$$a_5=v_{20}-10^6 v_5=32123432-32000000=123432$$
elde edilir. O halde kapalı form
$$v_{5+15k}=32 \cdot 10^{6k}+123432\frac{10^{6k}-1}{10^6-1}$$
olur. \(k=2\) için
$$32 \cdot 10^{12}+123432(10^6+1)=32123432123432$$
çıkar; bu da gözlenen üçüncü terimle aynıdır. Küçük bir toplam kontrolü olarak
$$S(11)=36120$$
değeri de sağlanır.
C++, Python ve Java implementasyonları önce ilk \(45\) terimi tam olarak üretir. Bu sayede her biri \(15\) artık sınıfı için üç gözlem elde edilir: \(v_r\), \(v_{r+15}\) ve \(v_{r+30}\).
İlk ikisinden başlangıç değeri \(b_r=v_r\) ile eklenen altılı blok
$$a_r=v_{r+15}-10^6 v_r$$
çıkarılır. Daha sonra üçüncü değerle
$$v_{r+30}=10^6 v_{r+15}+a_r$$
eşitliği doğrulanır; böylece tekrar bağıntısının gerçekten oturduğu kontrol edilir.
Ardından büyük \(N\) için program \(B^{K_r} \pmod{M}\) değerlerini hızlı modüler üs alma ile hesaplar, \(B-1\)'in modüler tersini bulur, \(P(K_r)\) ve \(Q(K_r)\) değerlerini mod altında oluşturur ve \(15\) sınıfın katkılarını toplar. Tam sayı olarak üretilen ilk \(45\) terim yalnızca sabit maliyetli bir kalibrasyondur; asıl büyük girdi kapalı formüllerle çözülür.
İlk \(45\) terimi tam olarak üretmek sabit maliyetlidir. Ana hesaplama yalnızca \(15\) artık sınıfını işler; her sınıfta sabit sayıda modüler işlem ve bir adet \(B^{K_r}\) hesaplaması vardır. Bu nedenle toplam süre
$$O(\log N)$$
ve bellek kullanımı
$$O(1)$$
olur.
Existe un flujo infinito de dígitos que repite
$$1,2,3,4,3,2,1,2,3,4,3,2,\dots$$
El flujo no se reinicia entre términos: cuando termina \(v_n\), el término \(v_{n+1}\) empieza exactamente en el siguiente dígito. Para cada entero positivo \(n\), \(v_n\) es el número decimal formado al concatenar dígitos sucesivos hasta que la suma de esos dígitos sea exactamente \(n\). Los primeros valores son
$$v_1=1,\quad v_2=2,\quad v_3=3,\quad v_4=4,\quad v_5=32,\quad v_6=123,\dots$$
Debemos calcular
$$S(N)=\sum_{n=1}^{N} v_n \pmod{123454321}$$
para un \(N\) enorme. Simular término por término sería lineal en \(N\), así que la solución debe convertir la periodicidad del flujo en una fórmula cerrada.
La idea central es separar la secuencia en las \(15\) clases residuales módulo \(15\). Dentro de cada clase, los términos obedecen una recurrencia afín muy simple.
Después de construir los primeros \(m\) términos, la suma total de dígitos consumida del flujo es
$$A_m=1+2+\cdots+m=\frac{m(m+1)}{2}.$$
Un ciclo completo del reloj usa las seis cifras \(1,2,3,4,3,2\), cuya suma es
$$1+2+3+4+3+2=15.$$
Las sumas parciales dentro de un ciclo son \(0,1,3,6,10,13,15\), todas distintas módulo \(15\). Por eso, la posición dentro del ciclo de seis dígitos queda determinada por la suma consumida módulo \(15\).
El término \(v_n\) empieza después de los primeros \(n-1\) términos, así que su posición inicial depende de \(A_{n-1}\). Ahora bien,
$$A_{n+14}-A_{n-1}=\frac{(n+14)(n+15)-(n-1)n}{2}=15(n+7),$$
que es múltiplo de \(15\). Por tanto, \(v_n\) y \(v_{n+15}\) comienzan siempre en el mismo punto del flujo periódico. De ahí nace la descomposición por \(n \bmod 15\).
Fijemos \(r \in \{1,\dots,15\}\) y escribamos
$$n=r+15k.$$
Los términos \(v_r,v_{r+15},v_{r+30},\dots\) parten de la misma posición. Sus sumas objetivo difieren en \(15\), y el siguiente ciclo completo desde una posición fija contiene exactamente seis dígitos con suma \(15\). En consecuencia, \(v_{r+15(k+1)}\) se obtiene tomando \(v_{r+15k}\) y añadiéndole un bloque rotado de seis dígitos.
Si \(B=10^6\), concatenar seis dígitos en decimal equivale a multiplicar por \(B\). Por ello existen constantes \(b_r\) y \(a_r\), dependientes solo de la clase \(r\), tales que
$$b_r=v_r,$$
$$v_{r+15(k+1)}=B\,v_{r+15k}+a_r.$$
El número \(a_r\) es precisamente el bloque de seis cifras que se añade en esa clase residual.
La recurrencia
$$x_{k+1}=B\,x_k+a_r,\qquad x_0=b_r$$
tiene solución
$$x_k=b_r B^k+a_r\sum_{j=0}^{k-1}B^j.$$
Por tanto,
$$v_{r+15k}=b_r B^k+a_r\frac{B^k-1}{B-1}.$$
Esta igualdad vale exactamente sobre los enteros y elimina la necesidad de seguir simulando toda la secuencia.
Para una clase fija \(r\), el número de índices de la forma \(r+15k\) que no superan \(N\) es
$$K_r=\left\lfloor\frac{N-r}{15}\right\rfloor+1 \qquad (N \ge r).$$
Definimos
$$P(K)=\sum_{k=0}^{K-1} B^k=\frac{B^K-1}{B-1},$$
$$Q(K)=\sum_{k=0}^{K-1}\frac{B^k-1}{B-1}=\frac{P(K)-K}{B-1}.$$
Entonces la contribución de la clase \(r\) es
$$\sum_{k=0}^{K_r-1} v_{r+15k}=b_r P(K_r)+a_r Q(K_r).$$
Finalmente,
$$S(N)=\sum_{r=1}^{\min(15,N)}\left(b_r P(K_r)+a_r Q(K_r)\right)\pmod{123454321}.$$
Todo se calcula módulo
$$M=123454321.$$
Como
$$\gcd(B-1,M)=\gcd(999999,123454321)=1,$$
el número \(B-1\) tiene inverso modular. Así, las divisiones de \(P(K)\) y \(Q(K)\) se implementan como multiplicaciones por \((B-1)^{-1} \pmod{M}\), mientras que \(B^K \pmod{M}\) se obtiene con exponenciación rápida.
Los primeros términos exactos de esta clase son
$$v_5=32,\qquad v_{20}=32123432,\qquad v_{35}=32123432123432.$$
Por lo tanto,
$$a_5=v_{20}-10^6 v_5=32123432-32000000=123432.$$
La fórmula cerrada queda
$$v_{5+15k}=32 \cdot 10^{6k}+123432\frac{10^{6k}-1}{10^6-1}.$$
Para \(k=2\) obtenemos
$$32 \cdot 10^{12}+123432(10^6+1)=32123432123432,$$
que coincide con el tercer término observado. Como comprobación pequeña de la suma completa, también se cumple
$$S(11)=36120.$$
Las implementaciones en C++, Python y Java generan primero los primeros \(45\) términos exactamente. Eso basta para tener tres observaciones en cada una de las \(15\) clases residuales: \(v_r\), \(v_{r+15}\) y \(v_{r+30}\).
Con las dos primeras se obtienen el valor inicial \(b_r=v_r\) y el bloque añadido
$$a_r=v_{r+15}-10^6 v_r.$$
Luego se verifica con el tercer término que realmente
$$v_{r+30}=10^6 v_{r+15}+a_r.$$
Una vez confirmada la recurrencia, el cálculo grande usa potencias modulares rápidas para \(B^{K_r}\), el inverso modular de \(B-1\), las fórmulas cerradas de \(P(K_r)\) y \(Q(K_r)\), y la suma de las \(15\) contribuciones. La fase exacta inicial solo es una calibración de tamaño fijo.
Generar exactamente los primeros \(45\) términos cuesta tiempo constante. La parte principal procesa solo \(15\) clases residuales, y cada una requiere un número constante de operaciones modulares y una potenciación \(B^{K_r}\). Por ello, el tiempo total es
$$O(\log N),$$
y la memoria utilizada es
$$O(1).$$
存在一个无限数字流,不断重复
$$1,2,3,4,3,2,1,2,3,4,3,2,\dots$$
这个数字流不会在每一项之间重置。也就是说,构造完 \(v_n\) 之后,\(v_{n+1}\) 会从前一项停止的位置继续往后读。对每个正整数 \(n\),把连续读到的数字依次拼接成一个十进制整数,直到这些数字的和恰好等于 \(n\),所得的数就记为 \(v_n\)。前几项是
$$v_1=1,\quad v_2=2,\quad v_3=3,\quad v_4=4,\quad v_5=32,\quad v_6=123,\dots$$
题目要求计算
$$S(N)=\sum_{n=1}^{N} v_n \pmod{123454321}$$
其中 \(N\) 极大。若按定义逐项模拟,就必须一路生成到第 \(N\) 项,时间上完全不可接受。因此解法必须把数字流的周期性和十进制拼接的结构一起利用起来。
真正的突破点是:按 \(n\) 对 \(15\) 取模分组以后,每一组都满足同一个一阶仿射递推。于是大问题就能被拆成 \(15\) 个很小的闭式求和问题。
前 \(m\) 项一共消耗掉的数字和是
$$A_m=1+2+\cdots+m=\frac{m(m+1)}{2}.$$
而数字流的一个完整周期由六个数字 \(1,2,3,4,3,2\) 组成,其数字和为
$$1+2+3+4+3+2=15.$$
在单个周期内部,前缀和依次是 \(0,1,3,6,10,13,15\)。这些值对 \(15\) 取模后互不相同,因此“当前处在六位周期中的哪一个位置”完全由“已经消耗的数字和模 \(15\)”决定。
第 \(n\) 项 \(v_n\) 是在前 \(n-1\) 项结束后开始读取的,所以它的起点由 \(A_{n-1}\) 决定。现在看两个相隔 \(15\) 的下标:
$$A_{n+14}-A_{n-1}=\frac{(n+14)(n+15)-(n-1)n}{2}=15(n+7).$$
这个差恰好是 \(15\) 的倍数,因此 \(v_n\) 与 \(v_{n+15}\) 的起始读取位置总是相同。也就是说,整个问题天然按 \(n \bmod 15\) 分成 \(15\) 个独立的轨道。
固定一个余数 \(r \in \{1,\dots,15\}\),把下标写成
$$n=r+15k.$$
由于 \(v_r,v_{r+15},v_{r+30},\dots\) 的起点相同,而目标数字和每次恰好多 \(15\),所以从 \(v_{r+15k}\) 走到 \(v_{r+15(k+1)}\) 时,只需要在末尾再补上“接下来的一整个周期”。从任意固定位置开始读,接下来的一个完整周期一定包含恰好六个数字,总和刚好是 \(15\)。
设
$$B=10^6.$$
在十进制里,末尾拼接六位数字就等价于先乘 \(B\),再加上那六位数字本身。因此对每个余数 \(r\),都存在只依赖于该余数的两个常数 \(b_r\) 与 \(a_r\),使得
$$b_r=v_r,$$
$$v_{r+15(k+1)}=B\,v_{r+15k}+a_r.$$
其中 \(a_r\) 就是该余数类每次附加上的六位十进制块。
考虑递推
$$x_{k+1}=B\,x_k+a_r,\qquad x_0=b_r.$$
展开后得到
$$x_k=b_r B^k+a_r\sum_{j=0}^{k-1}B^j.$$
于是
$$v_{r+15k}=b_r B^k+a_r\frac{B^k-1}{B-1}.$$
这一步非常关键,因为它把“不断读取数字流”变成了“计算幂和几何级数”。对于极大的 \(N\),差别就是线性时间和对数时间的差别。
如果 \(N \ge r\),那么不超过 \(N\) 的、属于余数类 \(r\) 的项数是
$$K_r=\left\lfloor\frac{N-r}{15}\right\rfloor+1.$$
接着定义两个标准和式
$$P(K)=\sum_{k=0}^{K-1} B^k=\frac{B^K-1}{B-1},$$
$$Q(K)=\sum_{k=0}^{K-1}\frac{B^k-1}{B-1}=\frac{P(K)-K}{B-1}.$$
那么余数类 \(r\) 的总贡献就是
$$\sum_{k=0}^{K_r-1} v_{r+15k}=b_r P(K_r)+a_r Q(K_r).$$
最后把所有可能的余数类加起来:
$$S(N)=\sum_{r=1}^{\min(15,N)}\left(b_r P(K_r)+a_r Q(K_r)\right)\pmod{123454321}.$$
到这一步为止,原题已经从一个看似复杂的“流式构造问题”变成了 \(15\) 份几何级数求和。
程序在模
$$M=123454321$$
下工作。由于
$$\gcd(B-1,M)=\gcd(999999,123454321)=1,$$
所以 \(B-1\) 在模 \(M\) 下存在乘法逆元。这样一来,\(P(K)\) 与 \(Q(K)\) 中出现的除法都可以改写成乘以 \((B-1)^{-1} \pmod{M}\),而 \(B^K \pmod{M}\) 则用快速幂在 \(O(\log K)\) 时间内完成。
这一类的前三个精确项是
$$v_5=32,\qquad v_{20}=32123432,\qquad v_{35}=32123432123432.$$
于是附加块为
$$a_5=v_{20}-10^6 v_5=32123432-32000000=123432.$$
对应的闭式写成
$$v_{5+15k}=32 \cdot 10^{6k}+123432\frac{10^{6k}-1}{10^6-1}.$$
取 \(k=2\) 时,得到
$$32 \cdot 10^{12}+123432(10^6+1)=32123432123432,$$
与第三个精确项完全一致。作为整个序列的小规模校验,还可以验证
$$S(11)=36120.$$
C++、Python 和 Java 实现首先精确生成前 \(45\) 项。这样每个模 \(15\) 的余数类都能拿到三项样本:\(v_r\)、\(v_{r+15}\) 与 \(v_{r+30}\)。
利用前两项,程序提取出该类的初值 \(b_r=v_r\) 以及六位附加块
$$a_r=v_{r+15}-10^6 v_r.$$
随后再用第三项检查
$$v_{r+30}=10^6 v_{r+15}+a_r$$
是否成立,从而确认这个余数类的递推关系没有出错。
完成这一步之后,真正的大输入只需要做三件事:用快速幂求 \(B^{K_r} \pmod{M}\),用扩展欧几里得方法求出 \(B-1\) 的模逆,最后把 \(15\) 个余数类的闭式贡献累加起来。前 \(45\) 项的精确构造只是常数规模的启动阶段,不会影响整体复杂度。
精确生成前 \(45\) 项只需要常数时间。主过程只处理 \(15\) 个余数类,每一类做常数次模运算和一次快速幂。因此总时间复杂度为
$$O(\log N),$$
空间复杂度为
$$O(1).$$
Рассматривается бесконечный поток цифр, повторяющий цикл
$$1,2,3,4,3,2,1,2,3,4,3,2,\dots$$
Поток не перезапускается между соседними членами: после построения \(v_n\) следующий член \(v_{n+1}\) начинается ровно с того места, где закончился предыдущий. Для каждого положительного \(n\) число \(v_n\) получается конкатенацией последовательных цифр до тех пор, пока сумма выбранных цифр не станет точно равной \(n\). Первые члены таковы:
$$v_1=1,\quad v_2=2,\quad v_3=3,\quad v_4=4,\quad v_5=32,\quad v_6=123,\dots$$
Нужно вычислить
$$S(N)=\sum_{n=1}^{N} v_n \pmod{123454321}$$
для очень большого \(N\). Прямое моделирование требовало бы пройти все члены последовательно, поэтому решение должно использовать периодичность потока и структуру десятичной записи.
Главная идея состоит в разбиении последовательности на \(15\) классов по модулю \(15\). Внутри каждого такого класса члены удовлетворяют простой аффинной рекурсии.
После построения первых \(m\) членов суммарная сумма использованных цифр равна
$$A_m=1+2+\cdots+m=\frac{m(m+1)}{2}.$$
Один полный цикл часов состоит из цифр \(1,2,3,4,3,2\) и имеет сумму
$$1+2+3+4+3+2=15.$$
Префиксные суммы внутри одного цикла равны \(0,1,3,6,10,13,15\), и все они различны по модулю \(15\). Поэтому положение внутри шестизначного цикла однозначно определяется уже из общей потреблённой суммы по модулю \(15\).
Член \(v_n\) начинается после первых \(n-1\) членов, то есть его стартовая позиция зависит от \(A_{n-1}\). Рассмотрим теперь члены, отстоящие на \(15\):
$$A_{n+14}-A_{n-1}=\frac{(n+14)(n+15)-(n-1)n}{2}=15(n+7).$$
Эта разность делится на \(15\), значит \(v_n\) и \(v_{n+15}\) всегда стартуют из одной и той же точки периодического потока. Именно поэтому естественно группировать индексы по \(n \bmod 15\).
Зафиксируем остаток \(r \in \{1,\dots,15\}\) и запишем
$$n=r+15k.$$
Термы \(v_r,v_{r+15},v_{r+30},\dots\) начинаются в одной и той же позиции. Их целевые суммы цифр отличаются на \(15\), а следующий полный цикл из любой фиксированной позиции содержит ровно шесть цифр с суммой \(15\). Следовательно, \(v_{r+15(k+1)}\) получается из \(v_{r+15k}\) дописыванием ещё одного повернутого шестизначного блока.
Если обозначить
$$B=10^6,$$
то приписывание шести десятичных цифр означает умножение на \(B\) с последующим добавлением этого блока. Поэтому существуют константы \(b_r\) и \(a_r\), зависящие только от остатка \(r\), такие что
$$b_r=v_r,$$
$$v_{r+15(k+1)}=B\,v_{r+15k}+a_r.$$
Здесь \(a_r\) и есть шестизначный блок, который добавляется в данной ветви.
Для рекурсии
$$x_{k+1}=B\,x_k+a_r,\qquad x_0=b_r$$
получаем
$$x_k=b_r B^k+a_r\sum_{j=0}^{k-1}B^j.$$
Следовательно,
$$v_{r+15k}=b_r B^k+a_r\frac{B^k-1}{B-1}.$$
Это уже точная формула, которая заменяет бесконечное пошаговое моделирование вычислением степеней и геометрических сумм.
Если \(N \ge r\), то количество индексов вида \(r+15k\), не превосходящих \(N\), равно
$$K_r=\left\lfloor\frac{N-r}{15}\right\rfloor+1.$$
Введём обозначения
$$P(K)=\sum_{k=0}^{K-1} B^k=\frac{B^K-1}{B-1},$$
$$Q(K)=\sum_{k=0}^{K-1}\frac{B^k-1}{B-1}=\frac{P(K)-K}{B-1}.$$
Тогда вклад остаточного класса \(r\) равен
$$\sum_{k=0}^{K_r-1} v_{r+15k}=b_r P(K_r)+a_r Q(K_r).$$
Итоговая сумма принимает вид
$$S(N)=\sum_{r=1}^{\min(15,N)}\left(b_r P(K_r)+a_r Q(K_r)\right)\pmod{123454321}.$$
Программа работает по модулю
$$M=123454321.$$
Так как
$$\gcd(B-1,M)=\gcd(999999,123454321)=1,$$
число \(B-1\) имеет обратный элемент по модулю \(M\). Поэтому деления в формулах для \(P(K)\) и \(Q(K)\) заменяются умножением на \((B-1)^{-1} \pmod{M}\), а степень \(B^K \pmod{M}\) вычисляется быстрым возведением в степень.
Первые точные члены этого класса таковы:
$$v_5=32,\qquad v_{20}=32123432,\qquad v_{35}=32123432123432.$$
Отсюда
$$a_5=v_{20}-10^6 v_5=32123432-32000000=123432.$$
Значит, имеем закрытую формулу
$$v_{5+15k}=32 \cdot 10^{6k}+123432\frac{10^{6k}-1}{10^6-1}.$$
При \(k=2\) получаем
$$32 \cdot 10^{12}+123432(10^6+1)=32123432123432,$$
что в точности совпадает с третьим наблюдаемым членом. В качестве небольшой проверки полной суммы также верно
$$S(11)=36120.$$
Реализации на C++, Python и Java сначала точно строят первые \(45\) членов. Этого достаточно, чтобы для каждого из \(15\) классов по модулю \(15\) получить три значения: \(v_r\), \(v_{r+15}\) и \(v_{r+30}\).
По первым двум числам находятся начальное значение \(b_r=v_r\) и шестизначный добавляемый блок
$$a_r=v_{r+15}-10^6 v_r.$$
Затем по третьему числу проверяется, что действительно выполняется равенство
$$v_{r+30}=10^6 v_{r+15}+a_r.$$
После этой калибровки большие входные данные обрабатываются уже только через закрытые формулы: быстро вычисляются \(B^{K_r} \pmod{M}\), обратный элемент к \(B-1\), значения \(P(K_r)\), \(Q(K_r)\), а затем складываются \(15\) вкладов. Точный префикс длины \(45\) является лишь константной подготовкой и не меняет асимптотику.
Построение первых \(45\) точных членов занимает постоянное время. Основной алгоритм обрабатывает только \(15\) классов, и для каждого выполняется константное число модульных операций и одно быстрое возведение в степень. Следовательно, суммарная трудоёмкость равна
$$O(\log N),$$
а потребление памяти равно
$$O(1).$$
لدينا تيار لا نهائي من الأرقام يكرر الدورة
$$1,2,3,4,3,2,1,2,3,4,3,2,\dots$$
وهذا التيار لا يُعاد ضبطه بين حد وآخر. أي إن \(v_{n+1}\) يبدأ من الموضع الذي انتهى عنده \(v_n\). لكل عدد صحيح موجب \(n\)، نكوّن \(v_n\) بضم أرقام متتالية حتى يصبح مجموع هذه الأرقام مساويًا تمامًا لـ \(n\). أول الحدود هي
$$v_1=1,\quad v_2=2,\quad v_3=3,\quad v_4=4,\quad v_5=32,\quad v_6=123,\dots$$
والمطلوب حساب
$$S(N)=\sum_{n=1}^{N} v_n \pmod{123454321}$$
لقيمة ضخمة جدًا من \(N\). المحاكاة المباشرة ستتطلب توليد كل الحدود حتى \(N\)، ولذلك لا بد من استغلال الدورية الحسابية للتيار نفسه.
الفكرة الحاسمة هي تقسيم الحدود بحسب باقي القسمة على \(15\). بعد هذا التقسيم، يصبح كل مسار من هذه المسارات الخمسة عشر خاضعًا لعلاقة تكرارية خطية بسيطة من الدرجة الأولى.
بعد الانتهاء من أول \(m\) حدود، تكون قيمة مجموع الأرقام المستهلكة من التيار مساوية لـ
$$A_m=1+2+\cdots+m=\frac{m(m+1)}{2}.$$
أما الدورة الكاملة للتيار فتستخدم الأرقام الستة \(1,2,3,4,3,2\)، ومجموعها
$$1+2+3+4+3+2=15.$$
مجاميع السوابق داخل دورة واحدة هي \(0,1,3,6,10,13,15\)، وهذه القيم كلها مختلفة بترديد \(15\). لذلك فإن الموضع داخل الدورة السداسية يتحدد تمامًا من مجموع الأرقام المستهلكة بترديد \(15\).
وبما أن \(v_n\) يبدأ بعد انتهاء أول \(n-1\) حدود، فإن موضع بدايته يعتمد على \(A_{n-1}\). والآن نلاحظ أن
$$A_{n+14}-A_{n-1}=\frac{(n+14)(n+15)-(n-1)n}{2}=15(n+7).$$
هذا الفرق من مضاعفات \(15\)، ولذلك فإن \(v_n\) و \(v_{n+15}\) يبدآن دائمًا من الموضع نفسه داخل التيار الدوري. ومن هنا يظهر التقسيم الطبيعي بحسب \(n \bmod 15\).
لنثبت باقيًا \(r \in \{1,\dots,15\}\) ونكتب
$$n=r+15k.$$
الحدود \(v_r,v_{r+15},v_{r+30},\dots\) كلها تبدأ من الموضع نفسه. وبما أن مجموع الهدف يزداد بمقدار \(15\) في كل مرة، فإن الوصول إلى الحد التالي يتطلب قراءة دورة كاملة إضافية من التيار. ومن أي موضع ثابت، تحتوي الدورة الكاملة التالية على ست خانات بالضبط ومجموعها \(15\).
إذا وضعنا
$$B=10^6,$$
فإن إلحاق ست خانات عشرية في نهاية عدد يعني ضربه في \(B\) ثم إضافة تلك الخانات. لذلك توجد ثوابت \(b_r\) و \(a_r\) تعتمد فقط على الفئة الباقية \(r\) بحيث
$$b_r=v_r,$$
$$v_{r+15(k+1)}=B\,v_{r+15k}+a_r.$$
والعدد \(a_r\) هو بالضبط البلوك السداسي الذي يُلحق في كل انتقال داخل هذه الفئة.
للعلاقة
$$x_{k+1}=B\,x_k+a_r,\qquad x_0=b_r$$
نحصل على الصيغة
$$x_k=b_r B^k+a_r\sum_{j=0}^{k-1}B^j.$$
وبالتالي
$$v_{r+15k}=b_r B^k+a_r\frac{B^k-1}{B-1}.$$
هذه الصيغة صحيحة تمامًا على مستوى الأعداد الصحيحة، وهي التي تحول المسألة من محاكاة طويلة جدًا إلى حسابات مغلقة باستخدام المتتاليات الهندسية.
إذا كان \(N \ge r\)، فإن عدد الحدود من الشكل \(r+15k\) التي لا تتجاوز \(N\) هو
$$K_r=\left\lfloor\frac{N-r}{15}\right\rfloor+1.$$
ونعرّف
$$P(K)=\sum_{k=0}^{K-1} B^k=\frac{B^K-1}{B-1},$$
$$Q(K)=\sum_{k=0}^{K-1}\frac{B^k-1}{B-1}=\frac{P(K)-K}{B-1}.$$
عندئذ تكون مساهمة الفئة \(r\) هي
$$\sum_{k=0}^{K_r-1} v_{r+15k}=b_r P(K_r)+a_r Q(K_r).$$
ومن ثم تصبح الصيغة النهائية
$$S(N)=\sum_{r=1}^{\min(15,N)}\left(b_r P(K_r)+a_r Q(K_r)\right)\pmod{123454321}.$$
يُجرى كل الحساب بترديد
$$M=123454321.$$
ولأن
$$\gcd(B-1,M)=\gcd(999999,123454321)=1,$$
فإن \(B-1\) يملك معكوسًا ضربيًا بترديد \(M\). وهكذا تتحول القسمة في \(P(K)\) و \(Q(K)\) إلى ضرب في \((B-1)^{-1} \pmod{M}\)، بينما تُحسب \(B^K \pmod{M}\) بواسطة الأس السريع.
أول ثلاثة حدود دقيقة في هذه الفئة هي
$$v_5=32,\qquad v_{20}=32123432,\qquad v_{35}=32123432123432.$$
إذن
$$a_5=v_{20}-10^6 v_5=32123432-32000000=123432.$$
ومن ثم نحصل على الصيغة
$$v_{5+15k}=32 \cdot 10^{6k}+123432\frac{10^{6k}-1}{10^6-1}.$$
وعند \(k=2\) نجد أن
$$32 \cdot 10^{12}+123432(10^6+1)=32123432123432,$$
وهو تمامًا الحد الثالث الذي رُصد مباشرة. وكفحص صغير للمجموع الكلي نجد أيضًا
$$S(11)=36120.$$
تبدأ تطبيقات C++ وPython وJava بتوليد أول \(45\) حدًا بدقة كاملة. وهذا يكفي للحصول على ثلاث قيم من كل فئة من الفئات الخمس عشرة: \(v_r\) و \(v_{r+15}\) و \(v_{r+30}\).
من القيمتين الأوليين تستخرج الشيفرة القيمة الابتدائية \(b_r=v_r\) والبلوك المضاف
$$a_r=v_{r+15}-10^6 v_r.$$
ثم تستخدم القيمة الثالثة للتحقق من أن
$$v_{r+30}=10^6 v_{r+15}+a_r$$
صحيحة فعلًا، أي إن العلاقة التكرارية صالحة في تلك الفئة.
بعد هذه المرحلة التمهيدية، يصبح التعامل مع \(N\) الضخم مباشرًا: حساب \(B^{K_r} \pmod{M}\) بالأس السريع، وإيجاد معكوس \(B-1\) بترديد \(M\)، ثم تكوين \(P(K_r)\) و \(Q(K_r)\) وجمع مساهمات الفئات الخمس عشرة. وبذلك تكون الأجزاء الدقيقة الأولى مجرد خطوة معايرة ثابتة الكلفة.
توليد أول \(45\) حدًا بدقة كاملة عمل ثابت الكلفة. أما المرحلة الرئيسة فلا تتعامل إلا مع \(15\) فئة، ولكل فئة عدد ثابت من العمليات المعيارية مع عملية أس سريعة واحدة. لذلك يكون الزمن الكلي
$$O(\log N),$$
وتكون الذاكرة المستخدمة
$$O(1).$$