A. k-Factorization
time limit per test
2 secondsmemory limit per test
256 megabytesinput
standard inputoutput
standard outputGiven a positive integer n, find k integers (not necessary distinct) such that all these integers are strictly greater than 1, and their product is equal to n.
Input
The first line contains two integers n and k (2 ≤ n ≤ 100000, 1 ≤ k ≤ 20).
Output
If it's impossible to find the representation of n as a product of k numbers, print -1.
Otherwise, print k integers in any order. Their product must be equal to n. If there are multiple answers, print any of them.
Examples
input
5 1
output
5
input
5 2
output
-1
input
1024 5
output
2 64 2 2 2
题目大意:输入两个数n和k,找k个大于1的整数,使他们的乘积为n,输出这k个数(如果有多个,输出任意一组),如果没有,输出-1。
方法:把n分解成质因数的乘积,并把这些质因数保存在数组里。如果质因数的个数c小于k,输出-1;否则,输出前k-1个质因数和k到c个质因数的乘积(这样就刚好k个)。
代码:
#include<iostream> #include<cstdio> #include<cmath> using namespace std; const int N=1e5; int main() { int n,k; cin>>n>>k; int f[N]; int c=0; for(int i=2;i<=n;i++) { while(n%i==0) { n/=i; f[c++]=i; } } if(c<k)cout<<-1<<endl; else { for(int i=0;i<k-1;i++) cout<<f[i]<<' '; int sum=1; for(int i=k-1;i<c;i++) sum*=f[i]; cout<<sum<<endl; } return 0; }