Следующая: , Предыдущая: task2, Вверх: Top


3 Применение Maple в теории чисел

Большинство функций Maple для исcледований в области теории чисел содержатся в модуле numtheory. Для его подключения необходимо дать команду with(numtheory): .

Округление, целые и дробные части

Функция floor(x) округляет число x вниз, ceil(x) округляет число вверх, функция round(x) округляет x до ближайшего целого, функция trunc(x) возвращает floor(x) для положительных x и -floor(-x) – для отрицательных. Функция frac(x) возвращает дробную часть числа x.

Целочисленное деление, остатки, действия в кольцах вычетов

Для нахождения частного при целочисленном делении используется функция iquo, для вычисления остатка от деления – функция irem. У этих функций два параметра: делимое и делитель. Примеры:

     > iquo(100,3);
     
33

> irem(100,1);

1

Также можно выполнять действия в кольце вычетов по заданному модулю. Для этого используется оператор mod у которого левый операнд – вычисляемое выражение, правый операнд – модуль, по которому проводятся вычисления. Пример нахождения обратного элемента для числа 57 в кольце вычетов по модулю 179 и проверка правильности этого вычисления:

     > 1/57 mod 179;
     
22

> irem(%*57,179);

1

НОД, НОК

Для нахождения наибольшего общего делителя двух чисел используется функция igcd, для нахождения наименьшего общего кратного – функция ilcm. Пример:

     > igcd(57,179);
     
1

Расширенный алгоритм Евклида используется для нахождения по данным n и m таких чисел u и v, что un+vm=d, где d – наибольший общий делитель m и n. Для этого используется функция igcdex(n,m,'u','v'), где m, n – исходные числа, u и v – переменные, которым будут присвоено значение. Пример

     > igcdex(57,179,'u','v');
     
1

> u; v;

22
-7

> 57*u+179*v;

1

Проверка на простоту, разложение на множители, построение простых чисел

Для проверки числа на простоту используется функция isprime, которая возвращает true, если число простое и false – если составное. Для разложения числа на множители используются функции ifactor и ifactors. Первая функция возвращает результат в виде произведения степеней простых чисел, вторая – в виде списка простых чисел и их степеней. Все эти функции работают значительно эффективней простого подбора делителей, проверка на простоту осуществляется быстрее полного разложения на множители.

Для построения простых чисел используются функции prevprime, nextprime, ithprime. Функция prevprime(n) возвращает наибольшее простое число, которое меньше n, функция nextprime(n) возвращает наименьшее простое число, которое больше n. Функция ithprime(n) возвращает n-е простое число.

Для нахождения случайного простого числа следует использовать эти функции вместе с функцией rand(), которая возвращает псевдослучайное 12-значное натуральное число. Для инициализации генератора псевдослучайных чисел необходимо использовать функцию randomize().

     > isprime(7!);
     
false

> ifactor(7!);

(2)4(3)2(5)(7) ;

> ifactors(7!);

[1, [[2, 4], [3, 2], [5, 1], [7, 1]]]

> nexprime(7!);

5051

> isprime(%);

true

> nextprime(rand());

427419669163

Специальные функции

Функция divisors(n) возвращает список всех натуральных делителей данного целого числа.

Функия tau(n) (тау-функция) возвращает количество делителей числа n.

Функия sigma(n) (сигма-функция) возвращает сумму делителей делителей числа n. Функция sigma[k](n) возвращает сумму k-х степеней делителей числа n.

Функция pi(n) (пи-функция) возвращает количество простых чисел, не превосходящих n.

Функция phi(n) (фи-функция Эйлера) возвращает количество чисел, меньших n и взаимно простых с n.

Решение диофантовых уравнений

Для решения уравнений в целых числах используется функция isolve. Примеры:

     > isolve(5*x+7*y=1);
     
x = -4-7_Z1, y = 3+5_Z1

В данном случае _Z1 обозначает произвольное целое число, поэтому общее решение имеет вид x=-4-7n, y=3+5n.

Используем функцию isolve для решения уравнения Пелля x2-2y2=1. Вывод Maple мы будем часто опускать ввиду его объемности (повторите вычисления самостоятельно!).

     > Sol:=isolve(x^2-2*y^2=1):

Мы получим 4 серии решений, отличающихся только знаками. Положительные решения имеют вид x=1/2*(3+2*sqrt(2))n+1/2*(3-2*sqrt(2))n, y = sqrt(2)/4*((3+2*sqrt(2))n-(3-2*sqrt(2))n). Положим n=0 и вычислим решение:

     > _Z1:=0: Sol;
     
{y = 0, x = 1}, {y = 0, x = -12}, {y = 0, x = -1}, {y = 0, x = 1}

Это – тривиальное решение. Минимальное нетривиальное решение будет при n=1.

     > _Z1:=1: Sol;
     
{x = 3, y = 2}, {y = 2, x = -3}, {x = -3, y = -2}, {x = 3, y = -2}

При n=2 решение, выдаваемое Maple будет содержать радикалы, поэтому придется использовать функцию expand для раскрытия радикалов:

     > _Z1:=2: expand(Sol);
     
{x = 17, y = 12}

Для того, чтобы отменить присвоение _Z1 значения и снова сделать ее свободной переменной, необходимо использовать функцию unassign('_Z1').

Упражнения

  1. Разложите на множители число 1010+1.
  2. Проверьте, является ли число 10100+1 простым.
  3. Найдите наибольший общий делитель чисел 1010+1 и 1018+1.
  4. Найдите 100-е по счету простое число.
  5. Пьер Ферма считал, что все числа вида 22n, где n целое неотрицательное число – простые. Опровергните утверждение Ферма.
  6. Найдите ближайшие сверху и снизу простые числа к 10100.
  7. Сколько существует простых чисел, не превосходящих 106?
  8. Найдите общий вид решения в целых числах уравнения 3x+5y=179.
  9. Найдите общий вид решения в натуральных числах уравнения x2-2y2=-1. Найдите первые три наименьших его решения.
  10. Для отрезка [103,103+50] постройте графики функций pi(x), tau(x), sigma(x), phi(x).
  11. Ассимптотический закон распределения простых чисел гласит, что количество простых чисел не превосходящих x стремится к x/ln(x). Проверьте это утверждение, построив график отношения pi(x) к x/ln(x) на отрезке [105 ,106 ].