题意
给定n,要求找到一组a,b满足a+b=n且LCM(a,b)尽可能小。
题解
设 a,b 为两个解,假设 a≤b ,那么显然 lcm(a,b) 一定 ≥b。这里我们要构造 lcm(a,b)=b 的解
也就是说,a 可以整除 b ,这又等价于 a 整除 n 。要让 lcm(a,b) 尽可能小,相当于让 b 尽可能小也就是 a 尽可能大。
所以总结一下,要让 a 整除 n 并且 a 尽可能大,那就找 n 的最大的不等于 n的约数就好了。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<map>
#include<queue>
#include<sstream>
#include<set>
#include<bitset>
#include<vector>
#include<cmath>
using namespace std;
#define ios ios::sync_with_stdio(false)
const double pi=acos(-1.0);
int dx[]={-1,0,1,0,0},dy[]={0,1,0,-1,0};
typedef long long LL;
typedef pair<int,int> PII;
const int INF=0x3f3f3f3f;
const LL LNF=0x3f3f3f3f3f3f3f3f;
const int mod=1e9+7;
int n;
int main()
{
int T;
cin>>T;
while(T--)
{
cin>>n;
if(n % 2 == 0)
{
cout<<n/2<<' '<<n/2<<endl;
continue;
}
int ans=-1;
for(int i=2;i*i<=n;i++)
if(n % i == 0)
{
ans=max(ans,i);
ans=max(ans,n/i);
}
if(ans == -1) ans=1;
cout<<ans<<' '<<n-ans<<endl;
}
// system("pause");
}