2.4 KiB
id, title, challengeType, forumTopicId, dashedName
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
5a23c84252665b21eecc7eca | Números de Kaprekar | 5 | 302296 | 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, pois2223 * 2223 = 4941729
,4941729
pode ser dividido em494
e1729
, e494 + 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.
assert(typeof isKaprekar == 'function');
isKaprekar(1, 10)
deve retornar um booleano.
assert(typeof isKaprekar(1, 10) == 'boolean');
isKaprekar(1, 10)
deve retornar true
.
assert.equal(isKaprekar(1, 10), true);
isKaprekar(9, 10)
deve retornar true
.
assert.equal(isKaprekar(9, 10), true);
isKaprekar(2223, 10)
deve retornar true
.
assert.equal(isKaprekar(2223, 10), true);
isKaprekar(22823, 10)
deve retornar false
.
assert.equal(isKaprekar(22823, 10), false);
isKaprekar(9, 17)
deve retornar false
.
assert.equal(isKaprekar(9, 17), false);
isKaprekar(225, 17)
deve retornar true
.
assert.equal(isKaprekar(225, 17), true);
isKaprekar(999, 17)
deve retornar false
.
assert.equal(isKaprekar(999, 17), false);
--seed--
--seed-contents--
function isKaprekar(n, bs) {
}
--solutions--
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;
}