• Иллюстрированный самоучитель по Mathematica 5

    Остаток от деления (функция Mod)

    Чтобы получить остаток от деления n на m, нужно воспользоваться функцией Mod[n,m]. Наименьший возможный остаток в этом случае равен нулю, а наибольший… Как вы думаете, чему равен наибольший возможный остаток? "Конечно, m-1", – возможно, подумали вы. Ну, что же, я, конечно, приветствую ваши глубокие познания в теории чисел, ибо именно так написано во всех классических учебниках по этой дисциплине, если, конечно, именно в этом месте нет какой-либо досадной опечатки.

    Но должен вас разочаровать: вы не угадали. Зато, надеюсь, вам будет приятно узнать, что возможности функции Mod значительно шире, чем требуется для решения задач из задачников по классической теории чисел. Дело в том, что аргументы этой функции могут быть не только целыми (это предусмотрено классическими учебниками теории чисел), но и вещественными и даже комплексными! А во множестве вещественных чисел, как вы, надеюсь, еще помните, полно сюрпризов… Но сначала давайте рассмотрим простейший случай целых аргументов.

    Mod[7.5]
    2

    Ну вот, при делении 7 на 5 остаток равен 2. Просто и понятно, даже в уме можно вычислить. Вот еще один пример.

    Mod[3^10.5]
    4

    Тоже в уме, и тоже просто и понятно. Но вот несколько примеров с вещественными числами.

    Иллюстрированный самоучитель по Mathematica 5 › Модулярная арифметика: деление с остатком, вычеты, сравнения и китайская теорема об остатках › Остаток от деления (функция Mod)

    Теперь, надеюсь, вы поняли, что множество значений Mod[n,m] не имеет наибольшего элемента. Можно лишь утверждать, что при вещественных m и n 0<Mod [n, m] <m, причем все значения из открытого справа интервала [0, m) функция Mod[n,m] принимает. Но иногда нужно сдвинуть этот интервал на d. Нет проблем: укажите сдвиг d третьим параметром.

    Вот как можно найти остатки от деления чисел 0, 1.2,…, 21 на 3.

    Mod[Range[0.21], 3]
    {0.1.2.0.1.2.0.1.2.0.1.2.0.1.2.0.1.2.0.1.2.0}

    А вот те же остатки, когда задан сдвиг 1.

    Mod[Range[0, 21], 3.1]
    {3.1.2.3.1.2.3.1.2.3.1.2.3.1.2.3.1.2.3.1.2.3}

    А вот те же остатки, когда задан сдвиг 2.

    Mod[Range[0, 21], 3.2]
    {3.4.2.3.4.2.3.4.2.3.4.2.3.4.2.3.4.2.3.4.2.3}
    Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.