有一个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<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=2e5+10;
int a[maxn],ans,n;
void work(int num)
{
int t=0;
while(t<a[n]) {
t=t+num;
int p=lower_bound(a+1,a+1+n,t)-a;
if(p==1) continue;
p--;
if(a[p]<num) continue;
ans=max(ans,a[p]%num);
}
}
int main()
{
int i,j;
ans=0;
scanf("%d",&n);
for(i=1;i<=n;i++) scanf("%d",&a[i]);
sort(a+1,a+1+n);
for(i=n;i>0;i--) {
if(ans>a[i]-1) break;
work(a[i]);
}
printf("%d\n",ans);
return 0;
}