4.15携程笔试2题

// 1 <= n <= 1e9
#include <bits/stdc++.h>
using namespace std;
long long x;

int main(){
    cin >> x;
    //a * b = gcd(a,b)*lcm(a,b) 当两个数gcd为1时,lcm最大,且为两个数的乘积;又两个数越接近,乘积越大。
    if(x & 1){ //连续的两个正整数互质,即gcd为1.
        cout << x / 2 << " " << x / 2 + 1;
    }
    else{
        long long a = x / 2 , b = x - a;
        //找到gcd为1互质的两个数
        while(gcd(a, b) != 1) a--, b++;
        cout << a << " " << b;
    }
    return 0;
}

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务