# Representation of a number in powers of other

Given two numbers w and m, we need to determine whether it is possible to represent m in terms of powers of w. The powers of number w can be added or subtracted to obtain m and each powers of w can be used only once .

Examples:

```Input : 3 7
Output : Yes
As 7 = 9 - 3 + 1 (3^2 - 3^1 + 3^0 )
so it is possible .

Input : 100 50
Output : No
As 50 is less than 100 so we can never
represent it in the powers of 100 .
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Here we have to represent m in terms of powers of w used only once so it can be shown through the following equation .
c0 + c1*w^1 + c2*w^2 + … = m —— (Equation 1)

Where each c0, c1, c2 … are either -1 (for subtracting that power of w ), 0 (not using that power of w ), 1 (for adding that power of w ) .

=> c1*w^1 + c2*w^2 + … = m – c0
=> w(c1 + c2*w^1 + c3*w^2 + … ) = m – c0
=> c1 + c2*w^1 + c3*w^2 + … = (m – c0)/w —— (Equation 2)

Now, notice equation 1 and equation 2 — we are trying to solve the same problem all over again. So we have to recurse till m > 0 . For such a solution to exist (m — ci) must be a multiple of w, where ci is the coefficient of the equation . The ci can be -1, 0, 1 . So we have to check for all three possibilities ( ( m – 1 ) % w == 0), ( ( m + 1 ) % w == 0) and ( m % w == 0) . If it is not, then there will not be any solution.

## C++

 `// CPP program to check if m can be represented ` `// as powers of w. ` `#include ` `using` `namespace` `std; ` ` `  `bool` `asPowerSum(``int` `w, ``int` `m) ` `{ ` `    ``while` `(m) { ` `        ``if` `((m - 1) % w == 0)  ` `            ``m = (m - 1) / w; ` `       ``else` `if` `((m + 1) % w == 0)  ` `            ``m = (m + 1) / w; ` `         `  `        ``else` `if` `(m % w == 0)  ` `            ``m = m / w; ` `         `  `        ``else` `            ``break``; ``// None of 3 worked. ` `    ``} ` ` `  `    ``// If m is not zero means, it can't be  ` `    ``// represented in terms of powers of w. ` `    ``return` `(m == 0); ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `w = 3, m = 7; ` `    ``if` `(asPowerSum(w, m)) ` `        ``cout << ``"Yes"` `<< endl; ` `    ``else` `        ``cout << ``"No"` `<< endl; ` `   ``return` `0; ` `} `

## Java

 `// Java program to check if m can  ` `// be represented as powers of w. ` ` `  `class` `GFG ` `{ ` `    ``static` `boolean` `asPowerSum(``int` `w, ``int` `m) ` `    ``{ ` `        ``while` `(m > ``0``)  ` `        ``{ ` `            ``if` `((m - ``1``) % w == ``0``)  ` `                ``m = (m - ``1``) / w; ` `             `  `            ``else` `if` `((m + ``1``) % w == ``0``)  ` `                ``m = (m + ``1``) / w; ` `             `  `            ``else` `if` `(m % w == ``0``)  ` `                ``m = m / w; ` `             `  `            ``else` `                ``break``; ``// None of 3 worked. ` `        ``} ` `     `  `        ``// If m is not zero means, it can't be  ` `        ``// represented in terms of powers of w. ` `        ``return` `(m == ``0``); ` `    ``}  ` `     `  `    ``// Driver function ` `    ``public` `static` `void` `main (String[] args) ` `    ``{ ` `        ``int` `w = ``3``, m = ``7``; ` `        ``if` `(asPowerSum(w, m)) ` `            ``System.out.println(``"Yes"``); ` `        ``else` `            ``System.out.println(``"No"``);  ` `    ``} ` `} ` ` `  `// This code is contributed by Anant Agarwal. `

## Python3

 `# Python3 program to check if m can  ` `# be represented as powers of w. ` `def` `asPowerSum(w, m): ` `    ``while` `(m > ``0``): ` `        ``if` `((m ``-` `1``) ``%` `w ``=``=` `0``): ` `            ``m ``=` `(m ``-` `1``) ``/` `w; ` `         `  `        ``elif` `((m ``+` `1``) ``%` `w ``=``=` `0``): ` `            ``m ``=` `(m ``+` `1``) ``/` `w; ` `         `  `        ``elif` `(m ``%` `w ``=``=` `0``): ` `            ``m ``=` `m ``/` `w; ` `         `  `        ``else``: ` `            ``break``; ``# None of 3 worked. ` `     `  `    ``# If m is not zero means, it can't be ` `    ``# represented in terms of powers of w. ` `    ``return` `(m ``=``=` `0``); ` ` `  `# Driver code ` `w ``=` `3``;  ` `m ``=` `7``; ` `if` `(asPowerSum(w, m)): ` `    ``print``(``"Yes"``); ` `else``: ` `    ``print``(``"No"``); ` ` `  `# This code is contributed by mits `

## C#

 `// C# program to check if  ` `// m can be represented ` `// as powers of w. ` `using` `System; ` ` `  `class` `GFG ` `{ ` `    ``static` `bool` `asPowerSum(``int` `w,  ` `                           ``int` `m) ` `    ``{ ` `        ``while` `(m > 0)  ` `        ``{ ` `            ``if` `((m - 1) % w == 0)  ` `                ``m = (m - 1) / w; ` `             `  `            ``else` `if` `((m + 1) % w == 0)  ` `                ``m = (m + 1) / w; ` `             `  `            ``else` `if` `(m % w == 0)  ` `                ``m = m / w; ` `             `  `            ``else` `                ``break``; ``// None of 3 worked. ` `        ``} ` `     `  `        ``// If m is not zero means,  ` `        ``// it can't be represented ` `        ``// in terms of powers of w. ` `        ``return` `(m == 0); ` `    ``}  ` `     `  `    ``// Driver Code ` `    ``static` `public` `void` `Main () ` `    ``{ ` `        ``int` `w = 3, m = 7; ` `        ``if` `(asPowerSum(w, m)) ` `            ``Console.WriteLine(``"Yes"``); ` `        ``else` `            ``Console.WriteLine(``"No"``);  ` `    ``} ` `} ` ` `  `// This code is contributed  ` `// by akt_mit. `

## PHP

 ` `

Output:

```Yes
```

GeeksforGeeks has prepared a complete interview preparation course with premium videos, theory, practice problems, TA support and many more features. Please refer Placement 100 for details

My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : jit_t, Mithun Kumar