2021-06-15 00:49:18 -07:00
---
id: 5900f3ce1000cf542c50fee0
2021-11-06 08:56:52 -07:00
title: 'Problema 97: Grande número primo que não seja de Mersenne'
2021-06-15 00:49:18 -07:00
challengeType: 5
forumTopicId: 302214
dashedName: problem-97-large-non-mersenne-prime
---
# --description--
2021-11-29 08:32:04 -08:00
O primeiro número primo descoberto que excedia um milhão de algarismos foi descoberto em 1999. Ele é um primo de Mersenne no formato $2^{6972593} - 1$ e contém exatamente 2.098.960 algarismos. Depois disso, outros primos de Mersenne, no formato $2^p - 1$, foram encontrados e contendo mais algarismos.
2021-06-15 00:49:18 -07:00
2021-11-06 08:56:52 -07:00
No entanto, em 2004, foi encontrado um número primo enorme e não sendo um primo de Mersenne que contém 2.357.207 algarismos: $28433 × 2^{7830457} + 1$.
2021-06-15 00:49:18 -07:00
2021-11-29 08:32:04 -08:00
Encontre os últimos dez algarismos daquele primo que não seja de Mersenne na forma $multiplicador × 2^{potência} + 1$.
2021-06-15 00:49:18 -07:00
# --hints--
2021-11-06 08:56:52 -07:00
`largeNonMersennePrime(19, 6833086)` deve retornar uma string.
2021-06-15 00:49:18 -07:00
```js
assert(typeof largeNonMersennePrime(19, 6833086) === 'string');
```
2021-11-06 08:56:52 -07:00
`largeNonMersennePrime(19, 6833086)` deve retornar a string `3637590017` .
2021-06-15 00:49:18 -07:00
```js
assert.strictEqual(largeNonMersennePrime(19, 6833086), '3637590017');
```
2021-11-06 08:56:52 -07:00
`largeNonMersennePrime(27, 7046834)` deve retornar a string `0130771969` .
2021-06-15 00:49:18 -07:00
```js
assert.strictEqual(largeNonMersennePrime(27, 7046834), '0130771969');
```
2021-11-06 08:56:52 -07:00
`largeNonMersennePrime(6679881, 6679881)` deve retornar a string `4455386113` .
2021-06-15 00:49:18 -07:00
```js
assert.strictEqual(largeNonMersennePrime(6679881, 6679881), '4455386113');
```
2021-11-06 08:56:52 -07:00
`largeNonMersennePrime(28433, 7830457)` deve retornar a string `8739992577` .
2021-06-15 00:49:18 -07:00
```js
assert.strictEqual(largeNonMersennePrime(28433, 7830457), '8739992577');
```
# --seed--
## --seed-contents--
```js
function largeNonMersennePrime(multiplier, power) {
return true;
}
largeNonMersennePrime(19, 6833086);
```
# --solutions--
```js
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');
}
```