Сообщение Re: Красивые числа от 11.10.2022 6:31
Изменено 11.10.2022 8:17 s_aa
Re: Красивые числа
Заинтересовался что-то, тем более правильный ответ есть.
Вот вариант на JS
Вот вариант на JS
// число цифр слева и справа от центральной
const m = 6;
// общее количество цифр - оно же система счисления
const n = m * 2 + 1;
// последняя цифра в системе счисления по основанию n
const lastNumber = n - 1;
// максимальная сумма m цифр
const maxSum = lastNumber * m;
// массив для подсчета количества вариантов разных значений суммы m цифр
const aSum = new Array(maxSum + 1).fill(0);
// максимальное число, которое можно представить m разрядами в системе счисления по основанию n
let maxNumber = 0;
for (let i = 0; i < m; ++i) {
maxNumber += n ** i * lastNumber;
}
// перебираем все варианты расположения цифр в m разрядах
// и подсчитываем в массиве aSum количество значений суммы
for (let i = 0; i <= maxNumber; ++i) {
const s = changeBaseNumber(i, n).reduce((partialSum, a) => partialSum + a, 0);
aSum[s]++;
}
// вычисляем общее количество "красивых" чисел
const result = aSum.reduce((partialSum, a) => partialSum + a * a * 13, 0);
// сверяем с правильным результатом
console.log(result === 9203637295151);
/**
* Возвращает массив цифр для системы счисления по основанию osn для числе i
* @param {number} i
* @param {number} osn
* @returns
*/
function changeBaseNumber(i, osn) {
const aOsn = [];
let i0 = i;
let j = 1;
while (true) {
const ost = i0 % osn;
i0 = (i0 - ost) / osn;
aOsn.push(ost);
if (i0 === 0) break;
j++;
}
return aOsn;
}
Re: Красивые числа
Заинтересовался что-то, тем более правильный ответ есть.
Вот вариант на JS
Вот вариант на JS
// число цифр слева и справа от центральной
const m = 6;
// общее количество цифр - оно же система счисления
const n = m * 2 + 1;
// последняя цифра в системе счисления по основанию n
const lastNumber = n - 1;
// максимальная сумма m цифр
const maxSum = lastNumber * m;
// массив для подсчета количества вариантов разных значений суммы m цифр
const aSum = new Array(maxSum + 1).fill(0);
// максимальное число, которое можно представить m разрядами в системе счисления по основанию n
let maxNumber = 0;
for (let i = 0; i < m; ++i) {
maxNumber += n ** i * lastNumber;
}
// перебираем все варианты расположения цифр в m разрядах
// и подсчитываем в массиве aSum количество значений суммы
for (let i = 0; i <= maxNumber; ++i) {
const s = changeBaseNumber(i, n).reduce((partialSum, a) => partialSum + a, 0);
aSum[s]++;
}
// вычисляем общее количество "красивых" чисел
const result = aSum.reduce((partialSum, a) => partialSum + a * a * n, 0);
// сверяем с правильным результатом
console.log(result === 9203637295151);
/**
* Возвращает массив цифр для системы счисления по основанию osn для числе i
* @param {number} i
* @param {number} osn
* @returns
*/
function changeBaseNumber(i, osn) {
const aOsn = [];
let i0 = i;
let j = 1;
while (true) {
const ost = i0 % osn;
i0 = (i0 - ost) / osn;
aOsn.push(ost);
if (i0 === 0) break;
j++;
}
return aOsn;
}