квадратных долек. Маша хочет разделить эту шоколадку между своими друзьями, разломив шоколадку по линиям на
k
кусочков, то есть каждому другу достанется прямоугольный кусочек шоколадки.
У Юры сегодня день рождения, поэтому Маша хочет разделить шоколадку так, чтобы Юре достался самый большой кусок (содержащий как можно больше долек). Определите число долек в этом куске.Входные данные
Программа получает на вход три натуральных числа, каждое в отдельной строке:
m
,
n
и
k
. Все числа — целые положительные, при этом
m
и
n
не превосходят
10
6
, а
k≤mn
.
Обратите внимание на то, что значение
mn
, а, значит, и значение
k
в этой задаче может превышать возможное значение 32-битной целочисленной переменной, поэтому необходимо использовать 64-битные целочисленные типы данных (тип int64 в языке Pascal, тип long long в C++, тип long в Java и C#).
Выходные данные
Программа должна вывести одно целое число — максимально возможное количество долек в том прямоугольном куске, который получит Юра.
n = int(input())
m = int(input())
k = int(input())
n, m = (reversed(sorted([n, m])))
i = 1
j = max([j for j in range(1, m + 1) if i * j + k <= n * m + 1])
ans = i * j
flag = True
while i + j:
if flag:
i += 1
flag = False
else:
j -= 1
if i > n or j <= 0:
break
if i * j + k <= n * m + 1:
flag = True
if ans + k < i * j + k:
ans = i * j
print(ans)
m = int(input())
n = int(input())
k = int(input())
# Находим максимальное число долек, которое может занимать один кусок
max_deli = m * n // k
# Случай, когда можно разделить шоколадку на k равных кусков
if (m * n) % k == 0:
print(max_deli)
else:
# Ищем наибольший прямоугольный кусок
for i in range(max_deli, 0, -1):
if (m * n) % i == 0 and (m * n) // i >= k:
print(i)
break