#include <iostream>
typedef long long ll;
using namespace std;
bool ll_is_valid(ll t, ll N, ll x, ll y)
{
return t / x + (t - x) / y >= N;
}
ll f(ll N, ll x, ll y)
{
ll R = 1;
while (!ll_is_valid(R,N,x,y)) R *= 2;
ll L = R / 2;
while(R - L > 1)
{
ll M = (L + R) / 2;
if (!ll_is_valid(M,N,x,y)) {L = M;}
else {R = M;}
}
return R;
}
int main()
{
ll N,x,y;
cin >> N >> x >> y;
if(x > y) swap( x, y );
cout << f(N, x, y) << std::endl;
}
10 значащих нулей
Объяснение:
Нам нужно найти значение числя A892(16) в двоичной системе. Вначале переведем его в десятичную:
A892₁₆=10∙16³+8∙16²+9∙16¹+2∙16⁰=40960+2048+144+2=43154₁₀
Теперь переведем полученное 43154₁₀ в двоичную систему. Делается это последовательным делением начального числа на 2 в столбик. Сама запись деления достаточно громоздкая и я не буду ее тут приводить. В итоге получаем что
43154₁₀=1010100010010010₂
как мы видим все нули в полученном числе значащие, если любой из них отбросить то получится совершенно другое число. ответ 10 значащих нулей
PS Я все таки нарисовала деление в столбик и помещу его на прилагаемой картинке. Результат нужно читать по стрелке, от самой последней жирной крупной цифры к первой