51nod 3045 Lcm与Gcd构造

题意
给出2个数a,b的 Gcd(最大公约数n) 和 Lcm(最小公倍数m) ,求所有符合条件的a,b中,a + b的最小值。
思路
51nod 3045 Lcm与Gcd构造
代码

#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pb push_back
#define me memset
const int N = 1e6 + 10;
const int mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
using namespace std;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
int gcd(int a,int b)
{return b?gcd(b,a%b):a;}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        ll n,m;
        cin>>n>>m;
        ll c=m/n;
        ll ans=1e9;
        for(int i=1 ; i<=c/i ; i++)
        {
            if(c%i==0)
            {
                if(gcd(i,c/i)==1) ans=min(ans,(i+c/i)*n);
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}

总结
自己的数论真的差,对好多东西都不敏感。

上一篇:51Nod 2128 前缀异或


下一篇:CentOS 6.5 系统配置nfs服务