有一个a数组,里面有n个整数。现在要从中找到两个数字(可以是同一个) ai,aj ,使得 ai mod aj 最大并且 ai ≥ aj 。
Input
单组测试数据。 第一行包含一个整数n,表示数组a的大小。(1 ≤ n ≤ 2*10^5) 第二行有n个用空格分开的整数ai (1 ≤ ai ≤ 10^6)。
Output
输出一个整数代表最大的mod值。
Input示例
3 3 4 5
Output示例
2#include <algorithm> #include <cstring> #include <iostream> using namespace std; typedef long long ll; const int MAXN = 2e5 + 10; int a[MAXN]; int main() { int n; cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; } int result = 0; sort(a, a + n); for (int i = 0; i < n; i++) { if (i == 0 || a[i] != a[i - 1]) { int k = a[i] * 2; while (k <= a[n - 1]) { int pos = lower_bound(a, a + n, k) - a; if (pos != n) { result = max(result, a[pos - 1] % a[i]); } k += a[i]; } result = max(result, a[n - 1] % a[i]); } } cout << result << endl; return 0; }