Таких систем исчисления всего две. Основание а = 9 и основание а =367, но в системе с основанием 367 проблематично записывать числа (символов не хватит). Если число 3306(10) в системе исчисления с основанием а заканчивается цифрой 3, то тогда число 3303 делится на основание системы а. Отсюда алгоритм поиска. Находим все делители числа 3303. 3303 = 3*1101 = 3*3*367. Число 367 - простое. Поэтому основаниями системы исчисления могут быть только 3, 9, 367. Основание =3 не подходит, так как по условию число должно заканчиваться на 3 -> основание больше 3. Остаются 9, 367.
#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;
}
Если число 3306(10) в системе исчисления с основанием а заканчивается цифрой 3, то тогда
число 3303 делится на основание системы а.
Отсюда алгоритм поиска. Находим все делители числа 3303.
3303 = 3*1101 = 3*3*367. Число 367 - простое. Поэтому основаниями системы исчисления
могут быть только 3, 9, 367. Основание =3 не подходит, так как по условию число должно заканчиваться на 3 -> основание больше 3. Остаются 9, 367.