Дано число n . Найдите максимальный размер интервала [l,r] из целых положительных чисел такого, что для каждого числа i из этого интервала (т.е. l≤i≤r ) n кратно i . Если вам даны два целых числа l≤r , то размер интервала [l,r] равен r−l+1 (т.е. совпадает с количеством целых чисел, принадлежащих интервалу). Входные данные Первая строка содержит единственное целое число t (1≤t≤104 ) — количество наборов входных данных. Единственная строка каждого набора входных данных содержит одно целое число n (1≤n≤1018 ). Выходные данные Для каждого набора входных данных вывести одно целое число: максимальный размер допустимого интервала.
Пример
входные данные
10
1
40
990990
4204474560
169958913706572972
365988220345828080
387701719537826430
620196883578129853
864802341280805662
1000000000000000000
выходные данные
1
2
3
6
4
22
3
1
2
2
Примечание В первом наборе входных данных допустимым интервалом с максимальным размером является [1,1] (он допустим, так как n=1 кратно 1 ) и его размер равен 1 . Во втором наборе входных данных допустимым интервалом с максимальным размером является [4,5] (он допустим, так как n=40 кратно 4 и 5 ), а его размер равен 2 . В третьем наборе входных данных допустимым интервалом с максимальным размером является [9,11] . В четвертом наборе входных данных допустимым интервалом с максимальным размером является [8,13] . В седьмом наборе входных данных допустимым интервалом с максимальным размером является [327869,327871]
1. Считываем количество наборов входных данных t.
2. Для каждого набора входных данных:
- Считываем число n.
- Инициализируем переменную maxSize = 0, которая будет хранить максимальный размер интервала.
- Инициализируем переменные l = 1 и r = n, которые будут хранить границы интервала.
- Пока l <= r:
- Если n кратно l и r:
- Вычисляем размер текущего интервала currSize = r - l + 1.
- Если currSize > maxSize, обновляем maxSize = currSize.
- Увеличиваем l на 1 и уменьшаем r на 1.
- Если n не кратно l, увеличиваем l на 1.
- Если n не кратно r, уменьшаем r на 1.
- Выводим maxSize.
Пример реализации на C++:
```cpp
#include <iostream>
using namespace std;
int main() {
int t;
cin >> t;
for (int i = 0; i < t; i++) {
long long n;
cin >> n;
int maxSize = 0;
long long l = 1, r = n;
while (l <= r) {
if (n % l == 0 && n % r == 0) {
int currSize = r - l + 1;
if (currSize > maxSize) {
maxSize = currSize;
}
l++;
r--;
} else if (n % l != 0) {
l++;
} else if (n % r != 0) {
r--;
}
}
секрет в том, что для любого n один из оптимальных отрезков будет начинаться в единице, со знанием этого факта задача решается элементарно
доказательство оставляем читателю в качестве упражнения
#include
#include
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
long long n;
cin >> n;
long long ans = 1;
for (long long i = 2; i * i