作者:贰少爷闯天涯_964 | 来源:互联网 | 2023-05-18 03:37
TheK−PfactorizationofapositiveintegerNistowriteNasthesumoftheP-thpowerofKpositi
The K−P factorization of a positive integer N is to write N as the sum of the P-th power of K positive integers. You are supposed to write a program to find the K−P factorization of N for any positive integers N, K and P.
Each input file contains one test case which gives in a line the three positive integers N (≤), K (≤) and P (1). The numbers in a line are separated by a space.
Output Specification:
For each case, if the solution exists, output in the format:
N = n[1]^P + ... n[K]^P
where n[i]
(i
= 1, ..., K
) is the i
-th factor. All the factors must be printed in non-increasing order.
Note: the solution may not be unique. For example, the 5-2 factorization of 169 has 9 solutions, such as 1, or 1, or more. You must output the one with the maximum sum of the factors. If there is a tie, the largest factor sequence must be chosen -- sequence { , } is said to be larger than { , } if there exists 1 such that ai=bi for i<L and aL>bL.
If there is no solution, simple output Impossible
.
169 5 2
Sample Output 1:
169 = 6^2 + 6^2 + 6^2 + 6^2 + 5^2
169 167 3
Sample Output 2:
Impossible
C++代码如下:
1 #include
2 #include
3 #include
4 using namespace std;
5
6 int n, k, p;
7 vector<int>v;
8 vector<int>temp,ans;
9 int sum_g=0;
10 void init() {
11 int t;
12 for (int i = 0; i <25; i++) {
13 t = pow(i, p);
14 if (t <= n)
15 v.push_back(t);
16 else break;
17 }
18 }
19 void DFS(int index, int sum, int nowk, int sumk) {
20 if ( nowk == k && sum == n) {
21 if (sumk > sum_g) {
22 sum_g = sumk;
23 ans = temp;
24 }
25 return;
26 }
27 if ( sum>n || nowk > k)return;
28 if (index - 1 >= 0) {
29 temp.push_back(index);
30 DFS(index , sum + v[index], nowk + 1, sumk + index);
31 temp.pop_back();
32 DFS(index - 1, sum, nowk, sumk);
33 }
34 }
35 int main() {
36 cin >> n >> k >> p;
37 init();
38 DFS(v.size() - 1, 0, 0, 0);
39 if (ans.size() > 0) {
40 cout <" = ";
41 for (int i = 0; i 1; i++)
42 cout <"^" <" + ";
43 cout <1] <<"^" < endl;
44 }
45 else
46 cout <<"Impossible" << endl;
47 return 0;
48 }