Para cualesquiera dos enteros positivos $a$ y $b$, definimos la función $\texttt{gen_string}(a,b)$ mediante el siguiente código Python:
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
Código C++ equivalente:
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;
}
Cuando termina el bucle, $ia$ será igual a $a$ e $ib$ será igual a $b$, por lo que esta función devuelve una cadena de bits de longitud $a+b$ con exactamente $a$ ceros y $b$ unos. Por ejemplo, $\texttt{gen_string}(4,10)=01110110111011$.
Decimos que una cadena de bits $s$ es $\textbf{buena}$ si existen enteros positivos $x$ e $y$ tales que $s=\texttt{gen_string}(x,y)$. Dados dos enteros positivos $A$ y $B$ ($1\le A,B\le 10^{18}$), debes calcular el número de prefijos buenos de $\texttt{gen_string}(A,B)$. Por ejemplo, hay $6$ prefijos buenos de $\texttt{gen_string}(4,10)$:
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
Entrada
La primera línea contiene $T$ ($1\le T\le 10$), el número de casos de prueba independientes.
Cada una de las siguientes $T$ líneas contiene dos enteros $A$ y $B$.
Salida
La respuesta para cada caso de prueba en una línea nueva.
Ejemplos
Entrada 1
6
1 1
3 5
4 7
8 20
4 10
27 21
Salida 1
1
5
7
10
6
13
Subtareas
- Entrada 2: $A,B\le 100$
- Entrada 3: $A,B\le 1000$
- Entradas 4-7: $A,B\le 10^6$
- Entradas 8-13: Todas las respuestas son como máximo $10^5$.
- Entradas 14-21: Sin restricciones adicionales.
Autor del problema: Benjamin Qi