51nod1179【思维】
题意:
给你n个数,求两两之间的最大GCD;
思路:
n太大,然后感觉是分解质因子,但是感觉分解质因子还是搞不出谁和谁的GCD;
但是可以发现,GCD给了一个范围1e6,所以能不能枚举GCD,然后看看满不满足,这里在枚举的时候可以利用素数筛那个,直接枚举i的约数,之前把输入的数标记一下就好了;有两个就行;
const int N=1E6+10;
int flag[N];
int main()
{
memset(flag,0,sizeof(flag));
int n;
int x,tmax;
scanf("%d",&n);
scanf("%d",&tmax);
flag[tmax]++;
for(int i=2;i<=n;i++)
{
scanf("%d",&x);
tmax=max(tmax,x);
flag[x]++;
}
int i;
for(i=tmax;i>=1;i--)
{
int sum=0;
for(int j=i;j<=tmax;j+=i)
{
sum+=flag[j];
if(sum>=2)
break;
}
if(sum>=2)
break;
}
printf("%d\n",i);
return 0;
}