Codeforces Round 889 (Div. 2) B
题目链接
题目大意:给定一个正整数n,找到一个最大的正整数区间[l,r],使得该区间中的每个i(即,l≤i≤r)都是n的约数。
数据范围:n
<= 1e18
我们注意到 [l, r]区间中的每一个数,都是 [1, r -l + 1] 中某个数的倍数,所以 [l, r]中的每个数如果是n的约数,那[1, r -l + 1] 也是其约数,所以第一个不是n约数的x就是其答案.
#include<bits/stdc++.h>
using i64 = long long;
void solve() {
i64 n;
std::cin >> n;
for (int i = 1; i <= n; i ++) {
if (n % i != 0) {
std::cout << i - 1 << "\n";
return ;
}
}
std::cout << n << "\n";
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
int t;
std::cin >> t;
while (t -- ) {
solve();
}
return 0;
}