您的位置:首页 > 其它

HDU 5207

2015-05-02 19:02 330 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数学