2.7 KiB
2.7 KiB
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
5a23c84252665b21eecc7eca | カプレカ数 | 5 | 302296 | kaprekar-numbers |
--description--
正の整数は以下の場合、[カプレカ数](https://en.wikipedia.org/wiki/Kaprekar number) となります。
- 1 である、または
- その数字の2乗の10進数を正の整数の2つの部分に分け、その合計が元の数値に等しくなる
ただし、分割された部分が 0 のみであった場合は、0 は正とはみなされないため、無効となることに注意してください。
カプレカ数の例:
2223
は以下のとおりカプレカ数です。2223 * 2223 = 4941729
であり、4941729
が494
と1729
に分割でき、かつ494 + 1729 = 2223
となります。- カプレカ数の数列は A006886 として知られており、
1, 9, 45, 55, ...
で始まります。
--instructions--
数値 n
、底 bs
を取り、数値が与えられた底に対するカプレカ数の場合は true を返す関数を記述してください。 それ以外の場合、関数は false を返します。
--hints--
isKaprekar
は関数とします。
assert(typeof isKaprekar == 'function');
isKaprekar(1, 10)
はブール値を返す必要があります。
assert(typeof isKaprekar(1, 10) == 'boolean');
isKaprekar(1, 10)
は true
を返す必要があります。
assert.equal(isKaprekar(1, 10), true);
isKaprekar(9, 10)
は true
を返す必要があります。
assert.equal(isKaprekar(9, 10), true);
isKaprekar(2223, 10)
は true
を返す必要があります。
assert.equal(isKaprekar(2223, 10), true);
isKaprekar(22823, 10)
は false
を返す必要があります。
assert.equal(isKaprekar(22823, 10), false);
isKaprekar(9, 17)
は false
を返す必要があります。
assert.equal(isKaprekar(9, 17), false);
isKaprekar(225, 17)
は true
を返す必要があります。
assert.equal(isKaprekar(225, 17), true);
isKaprekar(999, 17)
は 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;
}