Разбор
Пусть — размер прямоугольника, который можно составить из квадратов. Поскольку и , то .
Переберем меньшую сторону прямоугольника от до . Переберем вторую сторону прямоугольника от до тех пор пока . В переменной подсчитываем число таких пар .
cnt = 0; for (i = 1; i <= sqrt(n); i++) for (j = i; i * j <= n; j++) cnt++;
Второй цикл можно свернуть в формулу. Можно заметить, что в нем пробегает от до . То есть значение на -ой итерации будет увеличено на . Приведенный двойной цикл можно переписать следующим образом:
cnt = 0; for (i = 1; i <= sqrt(n); i++) cnt = cnt + (n / i - i + 1);
Пример
Рассмотрим первый тест . Меньшая сторона прямоугольника перебирается от до .
Для вторая сторона может принимать значения от до . Имеем прямоугольников:
Для вторая сторона может принимать значения от до . Имеем два прямоугольника:
Итого для имеется возможных прямоугольников.
Реализация алгоритма
Читаем входное значение .
scanf("%d", &n);
Вычисляем ответ.
cnt = 0; for (i = 1; i <= sqrt(n); i++) cnt = cnt + (n / i – i + 1);
Выводим ответ.
printf("%lld\n", cnt);
Python реализация
import math
Читаем входное значение .
n = int(input())
Вычисляем ответ.
cnt = 0 for i in range(1, int(math.sqrt(n)) + 1): cnt += (n // i - i + 1)
Выводим ответ.
print(cnt)