C/C++

Решите задачу на с++. Просто кодом или письменно алгоритмом.

Дано число 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]
секрет в том, что для любого n один из оптимальных отрезков будет начинаться в единице, со знанием этого факта задача решается элементарно
доказательство оставляем читателю в качестве упражнения
Nemat Baxridinov
Nemat Baxridinov
36 952
Лучший ответ
Деня /////////////// а что мне тогда, просто проверять 1, потом 2, потом 3 и так далее?
Деня /////////////// да, ты надоел, у меня же прошло
Деня /////////////// какой код?
Деня /////////////// я кроме a и b , ничего не решил
Деня /////////////// ну так решай, стань 2ым)
 #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
Тимур Мулдашев
Тимур Мулдашев
25 860
Деня /////////////// А почему такой вывод странный?
Деня /////////////// а сейчас фото ввода
Артём Ипатов Полная чушь!
Алгоритм решения задачи:

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--;
}
}

cout << maxSize << endl;
}

return 0;
}
```
Деня /////////////// У вас неправильно выводит задача
 #include  
#define int long long

using namespace std;

void solve() {
int n; cin >> n;
int res = 1;
for (int i = 2; i
Деня /////////////// я писал, что уже не надо
Деня /////////////// ну так кто-нибудь скопирует, а потом его и группу тех кто скопировал забанят
Деня /////////////// за списование
Деня /////////////// списывание*