Für zwei beliebige positive ganze Zahlen $a$ und $b$ wird die Funktion $\texttt{gen_string}(a,b)$ durch den folgenden Python-Code definiert:
def gen_string(a: int, b: int):
res = ""
ia, ib = 0, 0
while ia + ib < a + b:
if ia * b <= ib * a:
res += '0'
ia += 1
else:
res += '1'
ib += 1
return res
Äquivalenter C++-Code:
string gen_string(int64_t a, int64_t b) {
string res;
int ia = 0, ib = 0;
while (ia + ib < a + b) {
if ((__int128)ia * b <= (__int128)ib * a) {
res += '0';
ia++;
} else {
res += '1';
ib++;
}
}
return res;
}
Beim Ende der Schleife ist $ia$ gleich $a$ und $ib$ gleich $b$. Diese Funktion gibt also eine Bitfolge der Länge $a+b$ mit genau $a$ Nullen und $b$ Einsen zurück. Zum Beispiel gilt $\texttt{gen_string}(4,10)=01110110111011$.
Eine Bitfolge $s$ heißt gut, wenn positive ganze Zahlen $x$ und $y$ existieren, sodass $s=\texttt{gen_string}(x,y)$. Gegeben sind zwei positive ganze Zahlen $A$ und $B$ ($1\le A,B\le 10^{18}$). Deine Aufgabe ist es, die Anzahl der guten Präfixe von $\texttt{gen_string}(A,B)$ zu berechnen. Zum Beispiel hat $\texttt{gen_string}(4,10)$ genau $6$ gute Präfixe:
x = 1 | y = 1 | gen_string(x, y) = 01 x = 1 | y = 2 | gen_string(x, y) = 011 x = 1 | y = 3 | gen_string(x, y) = 0111 x = 2 | y = 5 | gen_string(x, y) = 0111011 x = 3 | y = 7 | gen_string(x, y) = 0111011011 x = 4 | y = 10 | gen_string(x, y) = 01110110111011
Eingabe
Die erste Zeile enthält $T$ ($1\le T\le 10$), die Anzahl unabhängiger Testfälle.
Jede der nächsten $T$ Zeilen enthält zwei ganze Zahlen $A$ und $B$.
Ausgabe
Die Antwort für jeden Testfall in einer eigenen Zeile.
Beispiele
Eingabe 1
6
1 1
3 5
4 7
8 20
4 10
27 21
Ausgabe 1
1
5
7
10
6
13
Teilaufgaben
- Eingabe 2: $A,B\le 100$
- Eingabe 3: $A,B\le 1000$
- Eingaben 4-7: $A,B\le 10^6$
- Eingaben 8-13: Alle Antworten sind höchstens $10^5$.
- Eingaben 14-21: Keine zusätzlichen Beschränkungen.
Aufgabenautor: Benjamin Qi