2.7 KiB
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
5900f3831000cf542c50fe96 | Problema 23: Soma dos números não abundantes | 5 | 301873 | problem-23-non-abundant-sums |
--description--
Um número perfeito é aquele igual à soma de seus divisores próprios. Por exemplo, a soma dos divisores próprios de 28 é 1 + 2 + 4 + 7 + 14 = 28. Isso significa que 28 é um número perfeito.
Um número n
é chamado de deficiente se a soma de seus divisores próprios for menor que n
. Se a soma dos divisores próprios for maior que n
, esse número é chamado de abundante.
Como 12 é o menor número abundante, 1 + 2 + 3 + 4 + 6 = 16, o menor número que pode ser escrito como a soma de dois números abundantes é 24. Usando análise matemática, podemos comprovar que todos os números inteiros maiores que 28123 podem ser escritos como a soma de dois números abundantes. No entanto, este limite máximo não pode ser reduzido através de uma análise, embora se saiba que o maior número que não pode ser expresso como a soma de dois números abundantes é inferior a este limite.
Calcule a soma de todos os números inteiros positivos <= n
que não podem ser escritos como a soma de dois números abundantes.
--hints--
sumOfNonAbundantNumbers(10000)
deve retornar um número.
assert(typeof sumOfNonAbundantNumbers(10000) === 'number');
sumOfNonAbundantNumbers(10000)
deve retornar 3731004.
assert(sumOfNonAbundantNumbers(10000) === 3731004);
sumOfNonAbundantNumbers(15000)
deve retornar 4039939.
assert(sumOfNonAbundantNumbers(15000) === 4039939);
sumOfNonAbundantNumbers(20000)
deve retornar 4159710.
assert(sumOfNonAbundantNumbers(20000) === 4159710);
sumOfNonAbundantNumbers(28123)
deve retornar 4179871.
assert(sumOfNonAbundantNumbers(28123) === 4179871);
--seed--
--seed-contents--
function sumOfNonAbundantNumbers(n) {
return n;
}
sumOfNonAbundantNumbers(28123);
--solutions--
function abundantCheck(number) {
let sum = 1;
for (let i = 2; i <= Math.sqrt(number); i += 1) {
if(number % i === 0) {
sum += i + +(i !== Math.sqrt(number) && number / i);
}
}
return sum > number;
}
function sumOfNonAbundantNumbers(n) {
let sum = 0;
const memo = {};
let abundantList = [];
// Function checkSum checks if num can be represented as a sum of numbers in the stack (array)
const checkSum = (num, stack, memo) => {
for (let i = 0; i < stack.length; i += 1) {
if ((num - stack[i]) in memo) return true;
}
return false;
};
for (let i = 1; i <= n; i += 1) {
if (abundantCheck(i)) {
abundantList.push(i);
memo[i] = 1;
}
if (checkSum(i, abundantList, memo)) continue;
sum += i;
}
return sum;
}