您的位置:首页 > 其它

Uva 11827 Maximum GCD(水题、读入杀)

2016-07-27 17:55 357 查看
题目链接:

http://acm.hust.edu.cn/vjudge/contest/70017#problem/V

题目大意:

读入一行数,求出所有数间最大的GCD值

分析:

根据GCD性质,N个数的GCD不大于N−1个数的GCD,所以最大GCD一定出现于两个数间,由于只有至多100个数,100组样例,O(N2)暴力,但是注意读入,一开始用字符串流一直WA,看了题解发现用C语言的字符读入就过了,玄学AC

代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <sstream>
#include <cstring>
#include <string>
#include <vector>
#include <cmath>
#include <set>
#define MOD 1000000007
using namespace std;
typedef unsigned long long ull;
typedef long long ll;

/*---------------------------head files----------------------------------*/

bool num[150000];

void fd()
{
for (int i = 2 ; i <= 100000 ; i ++)
{
if (!num[i])
{
for (int j = 2*i ; j <= 100000 ; j += i)
num[j] = true;
}
}
num[1]=true;
num[2]=true;
}
inline ll max(ll a , ll b)
{
return a>b? a: b;
}

ll gcd (ll a , ll b)
{
return b==0? a : gcd(b,a%b);
}
int arr[6666];

int main()
{
string str;
ios::sync_with_stdio(false);
ll n,a;
char buf;
scanf("%d",&n);
while (getchar() != '\n');
while (n--)
{
int cnt=0;
ll maxx=0;
while ((buf = getchar()) != '\n')
if (buf >= '0' && buf <= '9') {
ungetc(buf,stdin);
scanf("%d",&arr[cnt ++]);
}
for (int i = 0 ; i < cnt ; i ++)
{
for (int j = i+1; j <cnt ; j ++)
{
if (i!=j)
maxx = max(maxx, gcd(arr[i],arr[j]));
}
}
cout<<maxx<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uva gcd