# Representation of a number in powers of other

• Difficulty Level : Expert
• Last Updated : 26 Apr, 2021

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 .```

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

 ``

## Javascript

 ``

Output:

`Yes`

My Personal Notes arrow_drop_up
Recommended Articles
Page :