Учитывая два числа n
и k
, найдите x
, 1 <= x <= k
, который максимизирует остаток n % x
.
Например, n = 20 и k = 10, решение равно x = 7, потому что остаток 20% 7 = 6 максимален.
Мое решение:
int n, k;
cin >> n >> k;
int max = 0;
for(int i = 1; i <= k; ++i)
{
int xx = n - (n / i) * i; // or int xx = n % i;
if(max < xx)
max = xx;
}
cout << max << endl;
Но мое решение O(k)
. Есть ли более эффективное решение этого?