zoukankan      html  css  js  c++  java
  • Codeforces Round #761 B. GCD Problem

    题目大意

    给定一个n,求出一组a,b,c,使得a,b,c满足a+b+c=n且gcd(a,b)=c.

    n (10≤n≤10^9)

    (1≤t≤10^5)

    分析

    看一眼数据范围,果断放弃暴力。先从最简单的情况开始想,尝试构造c=1的情况,发现只要a,b互质且a+b=n-c即可满足条件。分情况讨论,若n为偶数,则n-1为奇数,那么n-1可以拆成m+(m+1)的形式。

    若n为奇数,则n-1为偶数,先将m=(n-2)/2作为a,b的基点,如果m为偶数,则构造相差为2的互质数(除1之外,两个相差为2的奇数必定互质),如果m为奇数,则构造相差为4的互质数 (如果相差为2,则a,b为两个偶数,除1之外两个相差为4的奇数必定互质)。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    
    int t;
    
    int main()
    {
        cin>>t;
        while(t--)
        {
            int n;
            cin>>n;
            if(n%2==0)//偶数情况
            {
                cout<<(n-2)/2<<" "<<(n-2)/2+1<<" "<<1<<endl;    
            }
            else//奇数情况 
            {
                int m=(n-1)/2;
                if(m%2==0)
                {
                    cout<<m-1<<" "<<m+1<<" "<<1<<endl;    
                } 
                else cout<<m-2<<" "<<m+2<<" "<<1<<endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    生成器
    字典生成式
    列表推导式
    函数基础实战之ATM和购物车系统
    函数基础小结
    函数嵌套
    可变长参数
    函数参数
    java NIO(三)----通道(Channel)
    java NIO(二)----直接缓冲区和非直接缓冲区
  • 原文地址:https://www.cnblogs.com/KyleDeng/p/15700799.html
Copyright © 2011-2022 走看看