题目描述
鸡尾酒的数学很差,他学了很长时间的最大公约数,终于有一天他会求最大公约数了。
于是他迫不及待地向你提问——给定数轴上的区间[l,r],你可以从中任选两个不相同的整数,求它们的最大公约数。请问它们的最大公约数最大为多少?
输入
输入两个正整数l,r,意义如题面所示。
输出
输出一行一个正整数表示答案。
样例输入 Copy
【样例1】 6 10 【样例2】 10000 19999
样例输出 Copy
【样例1】 3 【样例2】 6666
提示
样例1解释:可以从中选出两个正整数6和9,它们的最大公约数为3。除此之外,没有一种选法可以使得两个数字的最大公约数更大。
【数据范围】
对于20%的数据,满足l<r≤1000。
对于另外20%的数据,满足r%l==0。
对于100%的数据,满足1≤l<r≤1e7
代码实现及简要解释:
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
long long l=0,r=0;
cin>>l>>r;
for(int i=r;i>=1;i--)
{
double ll=ceil(1.0*l/i)*i; //贪心算法(左区间向上取整)
double rr=floor(1.0*r/i)*i;//贪心算法(右区间向下取整)
if (ll<r&&ll!=rr&&rr>l) //满足区间要求(贪心运算后左右区间不相等,同时不越界)
{
cout<<i;
break;
}
}
return 0;
}