降一个数掰成两个数,要求这两个数的最小公倍数最小。
思路:找到这个数除自身外的最大因子 k k k,则答案为 k , n − k k,n-k k,n−k
#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
int T,n;
int main(){
#ifdef WINE
freopen("data.in","r",stdin);
#endif
scanf("%d",&T);
while(T--){
scanf("%d",&n);
vector<ll> factors;
for(ll x=1;x*x<=n;x++)
if(n%x==0){
factors.push_back(x);
factors.push_back(n/x);
}
sort(factors.begin(),factors.end());
int sz=factors.size();
ll res=factors[sz-2];
printf("%lld %lld\n",res,n-res);
}
return 0;
}