HDU 5207
题目链接:HDU 5207
题意:
从n个数中任意选出2个数,求gcd最大。
分析:
n个数,从大到小找第一个具有它的倍数的值,那就是最大值。
代码实现:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int n;
int x[100010], v[100010];
int calc( int N )
{
for (int i = N;i >= 1;i -- )
{
int sum = 0;
for (int j = i;j <= N;j += i )
{
sum += v[j];
if ( sum >= 2 )
return i;
}
}
return 1;
}
int main()
{
int T,tn=1;
scanf( "%d", &T );
while(T--)
{
scanf( "%d", &n );
int Max = 0;
memset(v,0,sizeof(v));
for ( int i = 1; i <= n; i ++ )
{
scanf( "%d", &x[i] );
Max = max( Max, x[i] );
v[x[i]] ++;
}
int ret = calc( Max );
printf( "Case #%d: %d\n", tn++, ret );
}
return 0;
}