题目传送门:https://www.luogu.com.cn/problem/P7947
这道题还是很好想的,首先我们可以把n分解质因数,再把这些质因数加起来,判断是否等于k,
如果等于就直接输出,大于就直接输出 -1 ,小于的话补 1 就行了
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[1005];
signed main(){
int n,k,len=0,ans=0;
cin>>n>>k;
for(int i=2;i<=n;i++){
while(n%i==0){
a[++len]=i;
n/=i;
ans+=i;
}
}
if(ans==k){
cout<<len<<endl;
for(int i=1;i<=len;i++){
cout<<a[i]<<' ';
}
//return 0;
}else if(ans<k){
int p=k-ans;
cout<<len+p<<endl;
for(int i=1;i<=len;i++){
cout<<a[i]<<' ';
}
//cout<<" ";
for(int i=1;i<=p;i++){
cout<<1<<' ';
}
}else{
return puts("-1"),0;
}
return 0;
}