codeforce 797A

来源:互联网 发布:js中有多少循环 编辑:程序博客网 时间:2024/06/05 17:52

题意:给定两个数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");}}}

原创粉丝点击