Информация об изменениях

Сообщение Re: Красивые числа от 11.10.2022 6:31

Изменено 11.10.2022 8:17 s_aa

Re: Красивые числа
Заинтересовался что-то, тем более правильный ответ есть.
Вот вариант на 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

// число цифр слева и справа от центральной
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;
}