题意:给定两个数n,k。(2 ≤ n ≤ 100000, 1 ≤ k ≤ 20).找到k个数使它们的乘积为n,如果不能找到,输出-1
思路:任意一个数可以唯一分解成如下形式:n= (a1^b1)*(a2^b2)...(an^b^n)其中a1~an为质数且,满足a1<a2<..<an,那只需看sn=b1+b2+..+bn与k的关系,如果sn<k则输出-1,大于就将最后n-k个数乘起来,当成最后一个数
#include<cstdio>
const int maxn = 21;
int a[maxn*1000];
int main()
{
int n,k;
//freopen("in.txt","r",stdin);
while(scanf("%d%d",&n,&k)!=EOF)
{
int cnt=0;
for(int i=2;i<=n;i++)
{
while(n%i==0)
{
n/=i;
a[cnt++]=i;
}
}
if(cnt<k)
printf("-1\n");
else
{
for(int i=k;i<cnt;i++)
a[k-1]*=a[i];
for(int i=0;i<k;i++)
printf("%d ",a[i]);
printf("\n");
}
}
}