diff --git a/curriculum/challenges/english/10-coding-interview-prep/project-euler/problem-97-large-non-mersenne-prime.md b/curriculum/challenges/english/10-coding-interview-prep/project-euler/problem-97-large-non-mersenne-prime.md
index b2b651f267..15dafc79a9 100644
--- a/curriculum/challenges/english/10-coding-interview-prep/project-euler/problem-97-large-non-mersenne-prime.md
+++ b/curriculum/challenges/english/10-coding-interview-prep/project-euler/problem-97-large-non-mersenne-prime.md
@@ -8,24 +8,42 @@ dashedName: problem-97-large-non-mersenne-prime
# --description--
-The first known prime found to exceed one million digits was discovered in 1999, and is a Mersenne prime of the form 26972593−1; it contains exactly 2,098,960 digits. Subsequently other Mersenne primes, of the form 2p−1, have been found which contain more digits.
+The first known prime found to exceed one million digits was discovered in 1999, and is a Mersenne prime of the form $2^{6972593} − 1$; it contains exactly 2,098,960 digits. Subsequently other Mersenne primes, of the form $2^p − 1$, have been found which contain more digits.
-However, in 2004 there was found a massive non-Mersenne prime which contains 2,357,207 digits: 28433×27830457+1.
+However, in 2004 there was found a massive non-Mersenne prime which contains 2,357,207 digits: $28433 × 2^{7830457} + 1$.
-Find the last ten digits of this prime number.
+Find the last ten digits of that non-Mersenne prime in the form $multiplier × 2^{power} + 1$.
# --hints--
-`lrgNonMersennePrime()` should return a number.
+`largeNonMersennePrime(19, 6833086)` should return a string.
```js
-assert(typeof lrgNonMersennePrime() === 'number');
+assert(typeof largeNonMersennePrime(19, 6833086) === 'string');
```
-`lrgNonMersennePrime()` should return 8739992577.
+`largeNonMersennePrime(19, 6833086)` should return the string `3637590017`.
```js
-assert.strictEqual(lrgNonMersennePrime(), 8739992577);
+assert.strictEqual(largeNonMersennePrime(19, 6833086), '3637590017');
+```
+
+`largeNonMersennePrime(27, 7046834)` should return the string `0130771969`.
+
+```js
+assert.strictEqual(largeNonMersennePrime(27, 7046834), '0130771969');
+```
+
+`largeNonMersennePrime(6679881, 6679881)` should return the string `4455386113`.
+
+```js
+assert.strictEqual(largeNonMersennePrime(6679881, 6679881), '4455386113');
+```
+
+`largeNonMersennePrime(28433, 7830457)` should return the string `8739992577`.
+
+```js
+assert.strictEqual(largeNonMersennePrime(28433, 7830457), '8739992577');
```
# --seed--
@@ -33,16 +51,38 @@ assert.strictEqual(lrgNonMersennePrime(), 8739992577);
## --seed-contents--
```js
-function lrgNonMersennePrime() {
+function largeNonMersennePrime(multiplier, power) {
return true;
}
-lrgNonMersennePrime();
+largeNonMersennePrime(19, 6833086);
```
# --solutions--
```js
-// solution required
+function largeNonMersennePrime(multiplier, power) {
+ function modStepsResults(number, other, mod, startValue, step) {
+ let result = startValue;
+ for (let i = 0; i < other; i++) {
+ result = step(number, result) % mod;
+ }
+ return result;
+ }
+
+ const numOfDigits = 10;
+ const mod = 10 ** numOfDigits;
+ const digitsAfterPower = modStepsResults(2, power, mod, 1, (a, b) => a * b);
+ const digitsAfterMultiply = modStepsResults(
+ digitsAfterPower,
+ multiplier,
+ mod,
+ 0,
+ (a, b) => a + b
+ );
+ const lastDigits = (digitsAfterMultiply + 1) % mod;
+
+ return lastDigits.toString().padStart(10, '0');
+}
```