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;
}

全部评论

相关推荐

12-08 15:35
浙江大学 Java
点赞 评论 收藏
分享
苗条的伊泽瑞尔最喜欢...:同28届被压力了,电科✌就不能去卷算法吗?把Java留给我们双非卷
投递快手等公司10个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务