Комментарии: (3)

Кодикевич и вычислительный кластер

Рубрика : Будни Кодикевича

Кодикевич где-то раздобыл вычислительный кластер и не придумал ничего лучше, чем просчитать 100 факториал... Получил огрмное число, но не успокоился на этом. Он сложил все цифры в полученном результате и получил второе огромное число. Потом сложил все цифры снова и т.д. пока не получил одноразрядное число.

Какое число получил Кодикевич?

Задачку можно найти в Интернете, правда, про другого персонажа. Там же есть ответ: 9.

Но почему?

Я написал нехитрую программу:

static class Program
{
    static long Fact(int n)
    {
        return (n == 0) ? 1 : (n * Fact(n - 1));
    }
 
    static int Sum(long n)
    {
        string s = n.ToString();
        int sum = 0;
 
        for (int i = 0; i < s.Length; i++)
            sum += int.Parse(s.Substring(i, 1));
 
        return sum;
    }
 
    static void Main()
    {
        int n = 20;
        long x = Fact(n);
 
        while (x > 10)
            x = Sum(x);
 
        Console.WriteLine(x);
    }
}

Подумаешь, вычисляю сумму циферок по-индуски...

При n = 6, 7, 8, 9, ..., 17, 18, 19, 20 получается действительно цифра 9. Дальше кончился long и я посмотреть не смог.

Так все же почему оно так?

Комментарии (3)

Начиная с факториала 6 все факториалы делятся на 9, т. к. 1х2х3х4х5х6хn на 9 делится по любому (две тройки в произведении уже есть).
Вспоминая признак делимости на 9 сумма цифр должна делиться на 9.
В свою очередь число, которое получилось после сложения всех цифр и которое делится на девять, тоже должно обладать таки свойством: если сложить его цифры, то полученное число тоже будет делиться на 9… и так можно складывать, пока не получится 9;)

Спасибо, Даша! Вопрос закрыт)

в данном месте твоя аватарка, Дим, как нельзя больше всего подходит к ситуации. этакая «легкая задумчивость» на лице))

Комментировать