Maximize?
CodeForces - 1968A
编辑
题目分析:
虽然题目是想让gcd(x,y)+y尽可能大,但是我们知道,gcd(x,y)才是我们关注的重心,y越大,gcd(x,y)越大,gcd(x,y)+y就越大。题目数据比较小,可以直接暴力,当然如果你想也可以尝试去优化一下。
解题思路:
我们可以直接枚举y,从1到x-1,并且对于每个y都计算gcd的值,再从里面找最大值。
知识点:
这里我们可以用gcd函数,因为博主这个蒟蒻当时写这道题的时候不知道gcd这个函数... ...所以觉得还是有必要提醒一下大家的!
gcd函数就是用来求最大公因数的一个函数,使用这个函数需要包含标准算法库的头文件#include<algorithm>
写法也很简单:__gcd(a,b)就是求a和b的最大公因数的意思,注意是两个下划线_噢。
你们最喜欢的直接上代码:
#include<iostream>
#include<algorithm>
using namespace std;
int t,Gcd,sum,msum;//msum是最大值
int x[1001];
int ans[1001];
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>t;
for(int i=1;i<=t;i++)//输入x
{
cin>>x[i];
int msum=0;//要初始化最大值
for(int j=1;j<x[i];j++)//遍历y
{
if(__gcd(x[i],j)+j>msum)
{
msum=__gcd(x[i],j)+j;//更新最大值
ans[i]=j;
}
}
}
for(int i=1;i<=t;i++)
{
cout<<ans[i]<<"\n";
}
return 0;
}