diff --git a/curriculum/challenges/english/10-coding-interview-prep/project-euler/problem-56-powerful-digit-sum.md b/curriculum/challenges/english/10-coding-interview-prep/project-euler/problem-56-powerful-digit-sum.md
index fbe0693bb2..407314741a 100644
--- a/curriculum/challenges/english/10-coding-interview-prep/project-euler/problem-56-powerful-digit-sum.md
+++ b/curriculum/challenges/english/10-coding-interview-prep/project-euler/problem-56-powerful-digit-sum.md
@@ -8,22 +8,46 @@ dashedName: problem-56-powerful-digit-sum
# --description--
-A googol (10100) is a massive number: one followed by one-hundred zeros; 100100 is almost unimaginably large: one followed by two-hundred zeros. Despite their size, the sum of the digits in each number is only 1.
+A googol ($10^{100}$) is a massive number: one followed by one-hundred zeros; $100^{100}$ is almost unimaginably large: one followed by two-hundred zeros. Despite their size, the sum of the digits in each number is only 1.
-Considering natural numbers of the form, `ab`, where `a`, `b` < 100, what is the maximum digital sum?
+Considering natural numbers of the form, $a^b$, where `a`, `b` < `n`, what is the maximum digital sum?
# --hints--
-`powerfulDigitSum()` should return a number.
+`powerfulDigitSum(3)` should return a number.
```js
-assert(typeof powerfulDigitSum() === 'number');
+assert(typeof powerfulDigitSum(3) === 'number');
```
-`powerfulDigitSum()` should return 972.
+`powerfulDigitSum(3)` should return `4`.
```js
-assert.strictEqual(powerfulDigitSum(), 972);
+assert.strictEqual(powerfulDigitSum(3), 4);
+```
+
+`powerfulDigitSum(10)` should return `45`.
+
+```js
+assert.strictEqual(powerfulDigitSum(10), 45);
+```
+
+`powerfulDigitSum(50)` should return `406`.
+
+```js
+assert.strictEqual(powerfulDigitSum(50), 406);
+```
+
+`powerfulDigitSum(75)` should return `684`.
+
+```js
+assert.strictEqual(powerfulDigitSum(75), 684);
+```
+
+`powerfulDigitSum(100)` should return `972`.
+
+```js
+assert.strictEqual(powerfulDigitSum(100), 972);
```
# --seed--
@@ -31,16 +55,47 @@ assert.strictEqual(powerfulDigitSum(), 972);
## --seed-contents--
```js
-function powerfulDigitSum() {
+function powerfulDigitSum(n) {
return true;
}
-powerfulDigitSum();
+powerfulDigitSum(3);
```
# --solutions--
```js
-// solution required
+function powerfulDigitSum(n) {
+ function sumDigitsOfPower(numA, numB) {
+ let digitsSum = 0;
+ let number = power(numA, numB);
+ while (number > 0n) {
+ const digit = number % 10n;
+ digitsSum += parseInt(digit, 10);
+ number = number / 10n;
+ }
+ return digitsSum;
+ }
+
+ function power(numA, numB) {
+ let sum = 1n;
+ for (let b = 0; b < numB; b++) {
+ sum = sum * BigInt(numA);
+ }
+ return sum;
+ }
+
+ const limit = n - 1;
+ let maxDigitsSum = 0;
+ for (let a = limit; a > 0; a--) {
+ for (let b = limit; b > 0; b--) {
+ const curDigitSum = sumDigitsOfPower(a, b);
+ if (curDigitSum > maxDigitsSum) {
+ maxDigitsSum = curDigitSum;
+ }
+ }
+ }
+ return maxDigitsSum;
+}
```