GCD - Fadi and LCM - CodeForces - 1285C

GCD - Fadi and LCM - CodeForces - 1285C

題意:

xa,b使LCM(a,b)=xmax(a,b)給定一個正整數x,要求正整數a,b,使得LCM(a,b)=x且max(a,b)儘量的小。

數據範圍:

1<=x<=1012Time limit1000 msMemory limit262144 kB1<=x<=10^{12}\\Time\ limit:1000\ ms,Memory\ limit:262144\ kB

題解:

xLCM(a,b)=xabmax(a,b)ab分解x的因子,要LCM(a,b)=x就是要求a與b互質,要max(a,b)儘量小就是a和b儘量接近。

xix/ii從\sqrt{x}開始從大到小枚舉因子i再計算另一個因子x/i與i是否互質即可。

代碼:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>

#define ll long long
#define inf 0x3f3f3f3f

using namespace std;

ll x;
ll gcd(ll a,ll b)
{
    return b ? gcd(b,a%b) : a;
}

int main()
{
    cin>>x;
    ll a,b,tmp;
    for(ll i=sqrt(x);i;i--)
        if(x%i==0)
        {
            tmp=x/i;
            if(gcd(i,tmp)==1)
            {
                a=min(i,tmp);
                b=max(i,tmp);
                break;
            }
        }

    cout<<a<<' '<<b<<endl;
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章