题意
给出2个数a,b的 Gcd(最大公约数n) 和 Lcm(最小公倍数m) ,求所有符合条件的a,b中,a + b的最小值。
思路
代码
#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;
}
总结
自己的数论真的差,对好多东西都不敏感。