 GFG App
Open App Browser
Continue

# Count ways to express a number as sum of powers

Given two integers x and n, we need to find number of ways to express x as sum of n-th powers of unique natural numbers. It is given that 1 <= n <= 20.
Examples:

```Input  : x = 100
n = 2
Output : 3
Explanation: There are three ways to
express 100 as sum of natural numbers
raised to power 2.
100 = 10^2 = 8^2+6^2 = 1^2+3^2+4^2+5^2+7^2

Input  : x = 100
n = 3
Output : 1
Explanation : The only combination is,
1^3 + 2^3 + 3^3 + 4^3```

We use recursion to solve the problem. We first check one by one that the number is included in summation or not.

## C++

 `// C++ program to count number of ways` `// to express x as sum of n-th power` `// of unique natural numbers.` `#include ` `using` `namespace` `std;`   `// num is current num.` `int` `countWaysUtil(``int` `x, ``int` `n, ``int` `num)` `{` `    ``// Base cases` `    ``int` `val = (x - ``pow``(num, n));` `    ``if` `(val == 0)` `        ``return` `1;` `    ``if` `(val < 0)` `        ``return` `0;`   `    ``// Consider two possibilities, num is` `    ``// included and num is not included.` `    ``return` `countWaysUtil(val, n, num + 1) +` `           ``countWaysUtil(x, n, num + 1);` `}`   `// Returns number of ways to express` `// x as sum of n-th power of two.` `int` `countWays(``int` `x, ``int` `n)` `{` `    ``return` `countWaysUtil(x, n, 1);` `}`   `// Driver code` `int` `main()` `{` `    ``int` `x = 100, n = 2;` `    ``cout << countWays(x, n);` `    ``return` `0;` `}`

## Java

 `// Java program to count number of ways` `// to express x as sum of n-th power` `// of unique natural numbers.` `public` `class` `GFG { `   `    ``// num is current num.` `    ``static` `int` `countWaysUtil(``int` `x, ``int` `n, ``int` `num)` `    ``{` `        ``// Base cases` `        ``int` `val = (``int``) (x - Math.pow(num, n));` `        ``if` `(val == ``0``)` `            ``return` `1``;` `        ``if` `(val < ``0``)` `            ``return` `0``;` `     `  `        ``// Consider two possibilities, num is` `        ``// included and num is not included.` `        ``return` `countWaysUtil(val, n, num + ``1``) +` `               ``countWaysUtil(x, n, num + ``1``);` `    ``}` `     `  `    ``// Returns number of ways to express` `    ``// x as sum of n-th power of two.` `    ``static` `int` `countWays(``int` `x, ``int` `n)` `    ``{` `        ``return` `countWaysUtil(x, n, ``1``);` `    ``}` `     `  `    ``// Driver code` `    ``public` `static` `void` `main(String args[])` `    ``{` `        ``int` `x = ``100``, n = ``2``;` `        ``System.out.println(countWays(x, n));` `    ``}` `}` `// This code is contributed by Sumit Ghosh`

## Python3

 `# Python program to count number of ways` `# to express x as sum of n-th power` `# of unique natural numbers.`   `# num is current num.` `def` `countWaysUtil(x,n,num):`   `    ``# Base cases` `    ``val ``=` `(x ``-` `pow``(num, n))` `    ``if` `(val ``=``=` `0``):` `        ``return` `1` `    ``if` `(val < ``0``):` `        ``return` `0` ` `  `    ``# Consider two possibilities, num is` `    ``# included and num is not included.` `    ``return` `countWaysUtil(val, n, num ``+` `1``) ``+``\` `           ``countWaysUtil(x, n, num ``+` `1``)`   ` `  `# Returns number of ways to express` `# x as sum of n-th power of two.` `def` `countWays(x,n):` `    ``return` `countWaysUtil(x, n, ``1``)`   `    `  `# Driver code` `x ``=` `100` `n ``=` `2`   `print``(countWays(x, n))`   `# This code is contributed` `# by Anant Agarwal.`

## C#

 `// C# program to count number of ways` `// to express x as sum of n-th power` `// of unique natural numbers.` `using` `System;`   `public` `class` `GFG { `   `    ``// num is current num.` `    ``static` `int` `countWaysUtil(``int` `x,` `                          ``int` `n, ``int` `num)` `    ``{` `        `  `        ``// Base cases` `        ``int` `val = (``int``) (x - Math.Pow(num, n));` `        ``if` `(val == 0)` `            ``return` `1;` `        ``if` `(val < 0)` `            ``return` `0;` `    `  `        ``// Consider two possibilities,` `        ``// num is included and num is` `        ``// not included.` `        ``return` `countWaysUtil(val, n, num + 1)` `              ``+ countWaysUtil(x, n, num + 1);` `    ``}` `    `  `    ``// Returns number of ways to express` `    ``// x as sum of n-th power of two.` `    ``static` `int` `countWays(``int` `x, ``int` `n)` `    ``{` `        ``return` `countWaysUtil(x, n, 1);` `    ``}` `    `  `    ``// Driver code` `    ``public` `static` `void` `Main()` `    ``{` `        ``int` `x = 100, n = 2;` `        `  `        ``Console.WriteLine(countWays(x, n));` `    ``}` `}`   `// This code is contributed by vt_m.`

## PHP

 ``

## Javascript

 ``

Output:

`3`

Time Complexity: O(n * sqrt(x) * logn)
Auxiliary Space: O(n * sqrt(x))

This article is contributed by Anjali. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.