Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Комп'ютерна алгебра.Навчально-методичний посібн...doc
Скачиваний:
17
Добавлен:
24.08.2019
Размер:
683.01 Кб
Скачать

3.9 Арифметичні прогресії

Іншим спеціальним видом списків є цілочисельні кінцеві арифметичні прогресії. Вони описуються першим, другим і останнім елементами, розділеними відповідно комі або двома крапками, і увязненими в квадратні дужки. Якщо прогресія складається з послідовних чисел, другий елемент може бути опущений.

Приклад:

gap>[1..999999]; #натуральниє числа від 1 до 999999 [ 1 .. 999999 ] gap>[1,2..999999];#эквивалентно попередній команді [ 1 .. 999999 ] gap>[1,3..999999]; # тут крок дорівнює 2 [ 1, 3 .. 999999 ] gap> Length( last ); 500000 gap> [ 999999, 999997 .. 1 ]; [ 999999, 999997 .. 1 ]

3.10 Використання циклів

Приклад 1: обчислити твір підстановок, що є елементами списку.

gap> pp:=[(1,3,2,6,8)(4,5,9) (1,6)(2,7,8)(4,9) > (1,5,7)(2,3,8,6), (1,8,9)(2,3,5,6,4), > (1,9,8,6,3,4,7,2) ];; gap> prod:= (); () gap> for p in pp do > prod:= prod * p; > od; gap> prod; (1,8,4,2,3,6,5)

Приклад 2: обчислення n! для n = 15.

gap> ff:= 1; 1 gap> for i in [1..15] do > ff:= ff * i; > od; gap> ff; 1307674368000

Приклад 3: розкласти на прості множники число 1333, використовуючи список простих чисел primes.

gap> n:= 1333; 1333 gap> factors:= []; [ ] gap> for p in primes do > while n mod p = 0 do > n:= n/p; > Add(factors, p); > od; > od; gap> factors; [ 31, 43 ] gap> n; 1

Оскільки n=1, то процес завершений (легко перевірити, помноживши 31 на 43).

Приклад 4: скласти список простих чисел, що не перевищують 1000 (функція Unbind виключає елемент із списку).

gap> primes:= []; [ ] gap> numbers:= [2..1000]; [ 2 .. 1000 ] gap> for p in numbers do > Add(primes, p); > for n in numbers do > if n mod p = 0 then > Unbind(numbers[n-1]); > fi; > od; > od;

3.11 Подальші операції із списками

Існує зручніший спосіб множення елементів списку з чисел або підстановок.

gap> Product([1..15]); 1307674368000 gap> Product(pp); (1,8,4,2,3,6,5)

Аналогічним чином працює функція Sum.

Приклад 1:

Аргументами функції List є список і ім'я функції. В результаті будуть створений список значень заданої функції на елементах заданого списку. Наприклад, для знаходження куба числа раніше була визначена функція cubed. Складемо з її допомогою список кубів чисел від 2 до 10.

gap> List([2..10], cubed); [ 8, 27, 64, 125, 216, 343, 512, 729, 1000 ]

Щоб скласти всі ці величини, ми можемо застосувати функцію Sum до останнього списку. Це ж можна зробити, використовуючи функцію cubed як додатковий аргумент функції Sum:

gap> Sum(last)= Sum([2..10], cubed); true

Приклад 2: отримання списку простих чисел, менших 30, із списку primes за допомогою функції Filtered:

gap> Filtered(primes, x-> x < 30); [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]

Приклад 3: оператор { } витягує частину списку, визначувану номерами початкового і кінцевого елементів списку:

gap> primes{ [1 .. 10] }; [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]