#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
vector<int> fac, ans, temp;
int n, k, p, sum, facsum, maxfacsum = -1, nowk;
void DFS(int index, int sum, int facsum, int nowk){
if(sum > n || nowk > k) return;
if(sum == n && nowk == k){;
if(facsum > maxfacsum){
ans = temp; maxfacsum = facsum;
}
return;
}
if(index - 1 >= 0){
temp.push_back(index);
DFS(index, sum + fac[index], facsum + index, nowk + 1);
temp.pop_back();
DFS(index - 1, sum, facsum, nowk);
}
}
int main(){
cin >> n >> k >> p;
for(int i = 0; pow(i, p) <= n; i++) fac.push_back(pow(i, p));
DFS(fac.size() - 1, 0, 0, 0);
if(maxfacsum == -1){
printf("Impossible"); return 0;
}else{
printf("%d = %d^%d", n, ans[0], p);
for(int i = 1; i < ans.size(); i++){
printf(" + %d^%d", ans[i], p);
}
}
return 0;
}
1103 Integer Factorization
最新推荐文章于 2022-11-02 15:37:03 发布