题解:P11036 【MX-X3-T3】「RiOI-4」GCD 与 LCM 问题

· · 题解

本题不妨一开始就设 b=1。
其次可以先写一个暴力程序找规律。

样例输出:
1 2 3
1 4 6
1 2 5
1 16 20120728

我们可以发现 d 一直为 c+a ,且 c 为2的幂,因此,我们只需要从2开始枚举 c ,每次乘2就可以了。

AC Code:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int lcm(int a,int b)//求最小公倍数
{
    return a/__gcd(a,b)*b;
}
signed main()
{
    int t;
    scanf("%lld",&t);
    while(t--)
    {
        int a;
        scanf("%lld",&a);
        int flag=0;
        int b=1;
        for(int c=2;;c*=2)
        {
            int d=c+a;
            if(a+b+c+d==1+lcm(c,d))//1和任何一个大于等于0的数的最大公约数
            {
                printf("%lld %lld %lld\n",b,c,d);
                break;
            }
        }
    }
    return 0;
}