题目描述:
You are given one integer number n. Find three distinct integers a,b,c such that 2≤a,b,c and a⋅b⋅c=n or say that it is impossible to do it.
If there are several answers, you can print any.
You have to answer t independent test cases.
输入描述:
The first line of the input contains one integer t (1≤t≤100) — the number of test cases.
The next n lines describe test cases. The i-th test case is given on a new line as one integer n (2≤n≤109).
输出描述:
5
64
32
97
2
12345
输入:
YES
2 4 8
NO
NO
NO
YES
3 5 823
输出:
1
4
题意:
给你一个整数n。找出三个不同的整数a、b、c,使得2≤a、b、c和a⋅b⋅c=n,或者说这是不可能的。
题解:
直接在因子里面搜就好了
代码:
#include<cstdio>
#include<vector>
#include<set>
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int t,n;
scanf("%d",&t);
while(t--){
vector<int> v;
set<int>s;
scanf("%d",&n);
for(int i = 2; i * i <= n; i ++){
if(n % i == 0){
v.push_back(i);
s.insert(i);
s.insert(n / i);
}
}
bool flag = false;
for(int i = 0; i < v.size(); i ++){
for(int j = i + 1; j < v.size(); j ++){
int num = v[i] * v[j];
int cnt = n / num;
if(n % cnt == 0 && cnt != v[i] && cnt != v[j] && s.find(cnt) != s.end()){
printf("YES\n");
flag = true;
printf("%d %d %d\n", v[i], v[j], cnt);
break;
}
}
if(flag) break;
}
if(!flag) printf("NO\n");
}
return 0;
}