---
id: 5a23c84252665b21eecc7eca
title: Números de Kaprekar
challengeType: 5
forumTopicId: 302296
dashedName: kaprekar-numbers
---
# --description--
Um número inteiro positivo é um [número de Kaprekar](https://en.wikipedia.org/wiki/Kaprekar number) se:
- É o número 1, ou
- A representação decimal de seu quadrado puder ser dividida uma vez em duas partes, que consistem em inteiros positivos que, somados, resultam no número original.
Note que uma divisão resultando em uma parte que consiste puramente em 0s não é válida, já que 0 não é considerado um número positivo.
Exemplo de números de Kaprekar:
2223
é um número de Kaprekar, pois 2223 * 2223 = 4941729
, 4941729
pode ser dividido em 494
e 1729
, e 494 + 1729 = 2223
- A série de números de Kaprekar é conhecida como A006886 e começa assim:
1, 9, 45, 55, ...
# --instructions--
Escreva uma função que receba um número $n$, uma base $bs$, e retorne true se o número for um número de Kaprekar para a base fornecida. Caso contrário, a função retornará false.
# --hints--
`isKaprekar` deve ser uma função.
```js
assert(typeof isKaprekar == 'function');
```
`isKaprekar(1, 10)` deve retornar um booleano.
```js
assert(typeof isKaprekar(1, 10) == 'boolean');
```
`isKaprekar(1, 10)` deve retornar `true`.
```js
assert.equal(isKaprekar(1, 10), true);
```
`isKaprekar(9, 10)` deve retornar `true`.
```js
assert.equal(isKaprekar(9, 10), true);
```
`isKaprekar(2223, 10)` deve retornar `true`.
```js
assert.equal(isKaprekar(2223, 10), true);
```
`isKaprekar(22823, 10)` deve retornar `false`.
```js
assert.equal(isKaprekar(22823, 10), false);
```
`isKaprekar(9, 17)` deve retornar `false`.
```js
assert.equal(isKaprekar(9, 17), false);
```
`isKaprekar(225, 17)` deve retornar `true`.
```js
assert.equal(isKaprekar(225, 17), true);
```
`isKaprekar(999, 17)` deve retornar `false`.
```js
assert.equal(isKaprekar(999, 17), false);
```
# --seed--
## --seed-contents--
```js
function isKaprekar(n, bs) {
}
```
# --solutions--
```js
function isKaprekar(n, bs) {
if (n < 1) return false;
if (n == 1) return true;
for (var a = n * n, b = 0, s = 1; a; s *= bs) {
b += (a % bs) * s;
a = Math.floor(a / bs);
if (b && a + b == n) return true;
}
return false;
}
```