题意是给一个数让分解成4个数的和,并且前两个数gcd=后两个数lcm,输出一组符合要求的数
A. GCD vs LCM
暴力,给的测试数据能过,但是提交上超时,输入1000000000也是要算很久。
感觉这个题要用dfs或者dp才能做出来
#include<bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
long long lcm(long long a, long long b) {
return a * b / gcd(a, b);
}
long long T;
long long n;
int main()
{
scanf("%lld",&T);
while(T--)
{
scanf("%lld",&n);
for(long long i = 1;i<=n;i++)
{
for(long long j = 1;j<=n-i;j++)
for(long long k = 1;k <= n-i-j;k++)
for(long long l = 1;l<= n-i-j-k;l++)
{
{
if(gcd(i,j)==lcm(k,l)&&i+j+k+l == n)
{
cout<<i<<" "<<j<<" "<<k<<" "<<l;
break;
}
break;
}
break;
}
break;
}
printf("\n");
}
return 0;
}