题目链接:http://codeforces.com/problemset/problem/483/A
题目意思:给出一个区间 [l, r],要从中找出a, b, c,需要满足 a, b 互质,b, c 互质,但是 a, c 不互质,也就是除了 1 之后还有其他公约数。要求 1<= a < b < c <= r,也就是 a, b, c 两两不相等的。如果找不出则输出 -1。
首先很容易知道,如果 [l, r] 这个区间只有两个数,那么肯定没有答案。还有一种情况是,如果 [l, r] 这个区间只有 三个数,且 l,r 同时为奇数,那么都是无解。除此都可以找出 3 个数满足条件。这三个数不难找出:偶数,奇数,偶数(连续的三个数) 绝对符合条件。找出第一个符合条件的最小偶数,再这样输出即可。
有个比较卑鄙的地方是 l 有可能等于 r,此时也是无解的。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std; typedef __int64 LL; int main()
{
LL l, r, interval;
while (scanf("%I64d%I64d", &l, &r) != EOF)
{
interval = r - l;
if (interval == || interval == || (interval == && l & && r & ))
printf("-1\n");
else
{
while (l & && l < r)
l++;
printf("%I64d %I64d %I64d\n", l, l+, l+); // even, odd, even
}
}
return ;
}