我们可以发现,当n为偶数时,很显然两个数相同时最小公倍数就是该数本身,直接输出即可。
当n为奇数时,不难发现,若n为素数,输出的两个数为1和n-1;若n为合数,则输出的其中一个数是n除其本身以外的最大因数。
这里顺便复习了一下辗转相除法求最大公约数,从而可以求得最小公倍数。
AC代码:
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
long long gcd(long long a,long long b)
{
return b==0 ? a:gcd(b,a%b);
}
long long lcm(long long a,long long b)
{
return a*b/gcd(a,b);
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int t,n;
cin>>t;
while(t--)
{
cin>>n;
if(n%2==0)
{
printf("%d %d\n",n/2,n/2);
continue;
}
else
{
int t=1,s=sqrt(n);
for(int i=2;i<=s;i++)
if(n%i==0)
{
t=n/i;
break;
}
printf("%d %d\n",t,n-t);
}
}
return 0;
}