题意:给你一个整数n。找出三个不同的整数a、b、c,使得2≤a、b、c和a⋅b⋅c=n,或者说这是不可能的。如果有几个答案,你可以打印任何答案。
题解:很容易看出来这是道质因数分解,我们只需要在分解的过程中,利用质因数构造从小到大构造初三个数然后判断就行,如果存在上述的a,b,c,显然abc是有大小的,这样的策略构造出的答案恰好跟样例符合,详见代码。
AC代码:
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <vector>
#include <map>
#include <algorithm>
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const int maxn=1e6+5;
int a[maxn];
main() {
IOS;
int t;
cin>>t;
while(t--) {
int n;
cin>>n;
a[1]=a[2]=a[3]=1;
int cnt=1;
for(int i=2; i<=n/i; i++) {
while(n%i==0) {
a[cnt]*=i;
n/=i;
if(cnt<3&&a[cnt]!=a[cnt-1])cnt++;
}
}
a[cnt]*=n;
if(cnt==3&&a[1]!=a[2]&&a[2]!=a[3]&&a[1]!=a[3]&&a[1]>=2&&a[2]>=2&&a[3]>=2)cout<<"YES"<<endl<<a[1]<<" "<<a[2]<<" "<<a[3]<<endl;
else cout<<"NO"<<endl;
}
}