1103. Integer Factorization (30)

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.

Input Specification:

Each input file contains one test case which gives in a line the three positive integers N (<=400), K (<=N) and P (1

Output Specification:

For each case, if the solution exists, output in the format:

N = n1^P + ... nK^P

where ni (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 122 + 42 + 22 + 22 + 12, or 112 + 62 + 22 + 22 + 22, 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 { a1, a2, ... aK } is said to be larger than { b1, b2, ... bK } if there exists 1<=L<=K such that ai=bi for ibL

If there is no solution, simple output "Impossible".

Sample Input 1:
169 5 2
Sample Output 1:
169 = 6^2 + 6^2 + 6^2 + 6^2 + 5^2
Sample Input 2:
169 167 3
Sample Output 2:
Impossible

#include 
#include 
#include 

using namespace std;

bool flag = false;
int num;
int n;
int p;
vector arr;
vector result;

int powInt(int x, int k)
{
    int temp = 1;
    for(int i=0; inum) break; //剪枝条件一,计算总和总数就退出循环
        if(sum == num && index==n-1)
        {
            for(int k=0; k> num >> n >> p;
    arr.resize(n);
    result.resize(n);
    DFS(0,0,(int)pow(num,1.0/p)+1,1);
    if(flag == false)
    {
        cout << "Impossible";
        return 0;
    }
    cout << num <<" = ";
    for(int i=n-1; i>=0; i--)
    {   if(i==n-1)
            cout << result[i] << "^" << p;
        else
            cout << " + " << result[i] << "^" << p;
    }
    return 0;

}

你可能感兴趣的:(1103. Integer Factorization (30))