Count ways to express a number as sum of powers
Last Updated :
22 Nov, 2023
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++
#include <bits/stdc++.h>
using namespace std;
int countWaysUtil( int x, int n, int num)
{
int val = (x - pow (num, n));
if (val == 0)
return 1;
if (val < 0)
return 0;
return countWaysUtil(val, n, num + 1) +
countWaysUtil(x, n, num + 1);
}
int countWays( int x, int n)
{
return countWaysUtil(x, n, 1);
}
int main()
{
int x = 100, n = 2;
cout << countWays(x, n);
return 0;
}
|
Java
public class GFG {
static int countWaysUtil( int x, int n, int num)
{
int val = ( int ) (x - Math.pow(num, n));
if (val == 0 )
return 1 ;
if (val < 0 )
return 0 ;
return countWaysUtil(val, n, num + 1 ) +
countWaysUtil(x, n, num + 1 );
}
static int countWays( int x, int n)
{
return countWaysUtil(x, n, 1 );
}
public static void main(String args[])
{
int x = 100 , n = 2 ;
System.out.println(countWays(x, n));
}
}
|
Python3
def countWaysUtil(x,n,num):
val = (x - pow (num, n))
if (val = = 0 ):
return 1
if (val < 0 ):
return 0
return countWaysUtil(val, n, num + 1 ) + \
countWaysUtil(x, n, num + 1 )
def countWays(x,n):
return countWaysUtil(x, n, 1 )
x = 100
n = 2
print (countWays(x, n))
|
C#
using System;
public class GFG {
static int countWaysUtil( int x,
int n, int num)
{
int val = ( int ) (x - Math.Pow(num, n));
if (val == 0)
return 1;
if (val < 0)
return 0;
return countWaysUtil(val, n, num + 1)
+ countWaysUtil(x, n, num + 1);
}
static int countWays( int x, int n)
{
return countWaysUtil(x, n, 1);
}
public static void Main()
{
int x = 100, n = 2;
Console.WriteLine(countWays(x, n));
}
}
|
Javascript
<script>
function countWaysUtil(x, n, num)
{
let val = (x - Math.pow(num, n));
if (val == 0)
return 1;
if (val < 0)
return 0;
return countWaysUtil(val, n, num + 1) +
countWaysUtil(x, n, num + 1);
}
function countWays(x, n)
{
return countWaysUtil(x, n, 1);
}
let x = 100, n = 2;
document.write(countWays(x, n));
</script>
|
PHP
<?php
function countWaysUtil( $x , $n , $num )
{
$val = ( $x - pow( $num , $n ));
if ( $val == 0)
return 1;
if ( $val < 0)
return 0;
return (countWaysUtil( $val , $n , $num + 1) +
countWaysUtil( $x , $n , $num + 1));
}
function countWays( $x , $n )
{
return countWaysUtil( $x , $n , 1);
}
$x = 100; $n = 2;
echo (countWays( $x , $n ));
?>
|
Output:
3
Time Complexity: O(2 ^ pow(x^(1/n)))
Auxiliary Space: O(pow(x^(1/n))
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...