Иллюстрированный самоучитель по 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, чтобы сообщить об этом редактору.