Администрация города решила разбить парк на пустыре площадью N × М. В парке планируется высадить деревья. Для каждого дерева нужно выделить участок прямоугольной формы с целочисленными сторонами и площадью, равной S.
Все участки должны быть равны, одинаково ориентированы, и их стороны должны быть параллельны сторонам пустыря.
Какое наибольшее количество деревьев можно высадить в парке?
Ответ
C++:
#include
#include
using namespace std;
long long n, m, s;
long long get_ans(long long a, long long b) {
return max((n / a) * (m / b), (n / b) * (m / a));
}
int main()
{
cin >> n;
cin >> m;
cin >> s;
long long ans = 0;
for (long long i = 2; i * i <= s; i++) {
if (s % i == 0) {
ans = max(ans, get_ans(i, s / i));
}
}
ans = max(ans, get_ans(1, s));
cout << ans;
}
Python:
def func(a, b):
return max((n // a) * (m // b), (n // b) * (m // a))
n = int(input())
m = int(input())
s = int(input())
i = 2
ans = 0
while i * i <= s:
if s % i == 0:
ans = max(ans, func(i, s // i))
i += 1
ans = max(ans, func(1, s))
print(ans)