TÓM TẮT

   Maple là một hệ thống tính toán trên các biểu thức đại số và minh hoạ toán học mạnh mẽ của công ty Warterloo Maple Inc. (http://www.maplesoft.com). Từ phiên bản 7, Maple cung cấp ngày càng nhiều các công cụ trực quan, các gói lệnh tự học gắn liền với toán học phổ thông và đại học. Bài viết này bước đầu tìm hiểu một số ứng dụng của phần mềm Maple để tính toán về phương diện số học.

Từ khóa: Maple, số học, ứng dụng maple

   1. Giới thiệu

   Ngày nay tin học đã và đang thâm nhập vào hầu hết các lĩnh vực khoa học- xă hội và đời sống con người. Nhiều chương trình tin học ứng dụng đó được phát triển rộng khắp. Đối với toán học có rất nhiều sản phẩm mang tính phổ dụng như Mathematica, Matlat, Maple... Những phần mềm này giúp ích rất nhiều cho việc giải toán, học toán cũng như việc ứng dụng toán học vào các ngành khoa học khác.

   Maple là một hệ thống tính toán trên các biểu thức đại số và minh hoạ toán học mạnh mẽ của công ty Warterloo Maple Inc. (http://www.maplesoft.com). Maple ra đời năm 1991 và thường xuyên phát triển, đến nay phiên bản 2018 đã được đưa vào sử dụng. Maple có cách cài đặt đơn giản, chạy được trên  nhiều hệ điều hành, có cấu trúc linh hoạt để sử dụng tối ưu cấu hình máy và có trình trợ giúp (help) rất dễ sử dụng. Từ phiên bản 7, Maple cung cấp ngày càng nhiều các công cụ trực quan, các gói lệnh tự học gắn liền với toán học phổ thông và đại học. Ưu điểm đó làm cho nhiều nước trên thế giới lựa chọn sử dụng Maple cùng các phần mềm toán học khác trong dạy học toán trước đòi hỏi của thực tiễn và sự phát triển của giáo dục.

   Trong quá trình tiếp cận và nghiên cứu Maple, chúng tôi nhận thấy rằng ngoài các tính năng tính toán và minh hoạ rất mạnh mẽ bằng các câu lệnh riêng biệt (thường chỉ cho ta kết quả cuối cùng), Maple còn là một ngôn ngữ lập trình hướng  thủ tục (procedure). Thủ tục là một dãy các lệnh của Maple theo thứ tự mà người lập trình định sẵn để xử lí một công việc nào đó, khi thực hiện thủ tục này Maple sẽ tự động thực hiện các lệnh có trong thủ tục đó một cách tuần tự và sau đó trả lại kết quả cuối cùng.

   Nhằm góp phần ứng dụng công nghệ thông tin vào đổi mới phương pháp giảng dạy và nghiên cứu toán học, bước đầu bài viết tìm hiểu một số ứng dụng của phần mềm Maple để tính toán về phương diện số học.

   2.Nội dung

   2.1. Số học Mô-đun

   - Số nguyên tố

Số nguyên tố là số lớn hơn 1, chỉ chia hết cho 1 và chính nó. Maple có nhiều lệnh liên quan đến số nguyên tố:

isprime(n): n có phải là số nguyên tố không?

ithprime(n): số nguyên tố thứ n

prevprime(n): số nguyên tố trước n

nextprime(n): số nguyên tố sau n

   Ví dụ:

+ Nếu ta gõ lệnh:                            isprime(73); ithprime(34);

    Thì nhận được kết quả:               true, 139

+ Nếu gõ lệnh:                                 prevprime(139): nextprime(139);

             Thì nhận được kết quả:                 137,149

(Từ đây trở về sau ta quy ước chi viết lệnh và kết quả)

   - Ước chung lớn nhất

Để tìm ước chung lớn nhất của hai số m,n ta dùng lệnh: gcd(m,n);

   Ví dụ

>gcd(42,24);

               6       

   Hai số được gọi là nguyên tố cùng nhau khi ước chung lớn nhất của chúng là 1. Ví dụ: 7 và 24

>gcd(7,24);

               1

   - Định lý Bezout

   Ước chung lớn nhất của (a,b) là số f nhỏ nhất có thể biểu diễn được dưới dạng tổ hợp tuyến tính của a và b.

(a,b) = f  (u,v), f = au + bv

Lệnh Maple tương ứng của định lý Bezout là

> igcdex(28,12,’u’,’v’),u,v;

Ước chung lớn nhất lớn nhất

   2.2. Hàm sigma(.) và số hoàn chỉnh

   Ta đã biết hàm tau(.) cho biết số lượng các ước dương của một số nguyên. Tổng của các ước này được tính bằng hàm sigma (.), có cú pháp lệnh tính là:

[> sigm(n) ;

   Ví dụ:

[> sigma(123456789) ;

178422816.

   Muốn biết n có hoàn chỉnh hay không, ta dùng lệnh kiểm tra xem biểu thức sigma(n) = 2*n có được thoả mãn không, bằng lệnh:

   [> is (sigma(n) = 2*n) ;

   Ví dụ: n = 6 là một số hoàn chỉnh, vì

[> is (sigma(6) = 2*6) ;

true.

   Tiếp tục với n =124

[> is (sigma(124) = 2*124) ;

false.

   Ta thấy nó không phải là số hoàn chỉnh. Để thấy được khả năng tính toán của Maple, ta xét một ví dụ không tầm thường, với n = 2305483008139952128. Khi ấy ta có :

[> is (sigma (2305483008139952128) =                                                                          2*2305483008139952128); 

true.

   Như vậy 2305483008139952128 là một số hoàn chỉnh.

   2.3. Số Mersenne và số nguyên tố Mersenne

   Số nguyên tố Mersenne thứ k là số  và được tính trực tiếp bằng lệnh:

[> M[k] : = 2^k - 1 ;

Thí dụ:  số Mersenne thứ 9 được tính bằng lệnh:

[> M[9] : = 2^9 - 1 ;

   Khi k là số nguyên tố ta dùng hàm mersenne(k) kiểm tra xem số Mersenne thứ k có phải là số nguyên tố Mersenne hay không? Nếu hàm trên trả lại giá tri false thì số M[k] không phải là số nguyên tố Mersenne ngược lại hàm trả lại bằng giá trị bằng số Mersenne thứ k, tức là .

   Ví dụ:

[> k : = 7 ;

k : = 7

[> mersenne(k) ;

127.

   Như vậy số Mersenne thứ 7 là số nguyên tố và bằng 127. Tương tự, ta dễ dàng kiểm tra được rằng trong 50 số Mersenne đầu tiên thì chỉ có các số thứ 2, 3, 5, 7, 13, 17, 19, 31 là những số nguyên tố (còn lại đều là hợp số). Càng về sau chúng càng phân bố thưa thớt, cho nên việc tìm được một số nguyên tố Mersenne cũng '' lắm công phu''

   Ví dụ:

[> mersenne(111) ;

false.

[> mersenne(203) ;

false.

 

[> mersenne(307) ;

false.

   2.4. Bậc của một số nguyên và căn nguyên thuỷ

   Bậc của số nguyên a theo modulo m là số tự nhiên n nhỏ nhất thoả mãn , và được tính bằng lệnh order(a , m). Kết quả trả lại của lệnh là FALL (bậc không tồn tại) nếu như  a và m không phải là hai số nguyên tố cùng nhau. Ngược lại hàm trả lại bậc của a theo modulo m.

   Ví dụ:

[> order(18, 30) ;

FALL.

[> order(171717, 232323323) ;

2040.

   Thật vậy, kiểm tra lại ta thấy:

[>171717&^ mod  232323323 ;

1.

   Căn nguyên thuỷ modulo m là những số có bậc đúng bằng , cho nên muốn kiểm tra một số a có phải là căn nguyên thuỷ hay không chỉ cần dùng lệnh.

[> is (order(a, m) =phi(m)) ;

Thí dụ:

[> is (order(123, 1114111) =phi(1114111)) ;

true.

 

[> is (order(1111 , 1114111) =phi(1114111)) ;

false.

   Như vậy 123 là căn nguyên thuỷ modulo 1114111, còn 1111 thì không phải. Ta biết rằng nếu tập căn nguyên thuỷ modulo m mà khác rỗng thì nó có số phần tử   phần tử không đồng dư với nhau. Như vậy số lượng các căn nguyên thuỷ modulo 1114111 (không đồng dư  với nhau) được tính bằng lệnh.

[> phi(phi(1114111)) ;

297072.

Phần tử đầu tiên trong tập các căn nguyên thuỷ modulo m được tính bằng lệnh

[> primroot(m) ;

   Nếu không tồn tại căn nguyên thuỷ modolo m thì kết quả sẽ báo FALL, còn ngược lại thì sẽ cho kết quả cần tìm.

Thí dụ:

[> primroot(11111111) ;

FALL.

[> primroot(11111117) ;

2.

   Phần tử đầu tiên lớn hơn số a trong tập các căn nguyên thuỷ modulo m được tính bằng lệnh

[> primroot(a, m) ;

   Ví dụ:

[> primroot(23, 11111117) ;

   27.      

   2.5. Phương trình đồng dư  và hệ phương trình đồng dư

   Giải phương trình eqn đồng dư theo modulo m bằng lệnh:

[> msolve(eqn , m) ;

   Ví dụ:

[> msolve(113*x^2+121*x-24 = 0, 333) ;

.

   Nếu như thấy kết quả không hiện ra thì có nghĩa là phương trình vô nghiệm

   Ví dụ:

[> msolve(113*x^2+121*x + 1 = 0, 333) ;

Thủ tục giải phương trình đồng dư cũng tương tự như vậy

   Ví dụ:

[> msolve(113*x - 144*y =111, 171*x + 159*y =211), 1111) ;

.

   2.6. Kiểm tra giả thuyết Fermat. Khi xét các số hạng an = , P. Fermat (1601-1665) nhận thấyvới n = 0, 1, 2, 3, 4 các số hạng an đều là các số nguyên tố.

   Kiểm tra lại điều này khi sử dụng MAPLE. Lệnh ifactor(a) để phân tích số a ra thừa số nguyên tố. Lệnh isprime(a) để biết a có phải là số nguyên tố không. Câu trả lời là true hoặc  false.

> a1:=2^(2^1)+1;ifactor(a1);isprime(a1);

> a2:=2^(2^2)+1;ifactor(a2);isprime(a2);

> a3:=2^(2^3)+1;ifactor(a3);isprime(a3);

> a4:=2^(2^4)+1;ifactor(a4);isprime(a4);

   Từ đó, Fermat dự đoán rằng  “an =  với n Î N đều là số nguyên tố''. Một trăm năm sau, Euler (1707 - 1783) phát hiện ra a5 không phải là số nguyên tố. Dùng Maple dễ nhận thấy điều này.

> a5:=2^(2^5)+1;ifactor(a5);isprime(a5);

   MAPLE cho biết a5 là tích của hai thừa số nguyên tố: 641 và 6700417.

Lặp lại các lệnh trên kiểm tra a6, a7, a8.

> a6:=2^(2^6)+1;ifactor(a6);isprime(a6);

.

> a7:=2^(2^7)+1;ifactor(a7);isprime(a7);

> a8:=2^(2^8)+1;ifactor(a8);isprime(a8);

   Tuy nhiên khi yêu cầu phân tích a9  ra thừa , Maple. Do đó ta bỏ qua yêu cầu này và chỉ cần hỏi a9 có phải là số nguyên tố không, Maple trả lời ngay.

> a9:=2^(2^9)+1;isprime(a9);

   Hãy thử cho a10, a11, a 12,   a13 , a14.

> a10:=2^(2^10)+1;isprime(a10);

> a11:=2^(2^11)+1;isprime(a11);

> a12:=2^(2^11)+1:isprime(a12);

> a13:=2^(2^13)+1;isprime(a13);

   Bỏ qua yêu cầu cho giá trị của a14 chỉ hỏi a14 phải là số nguyên tố không, Maple cho câu trả lời

> a14:=2^(2^14)+1:isprime(a14);

   Ta nhận thấy các an kiểm tra ở trên đều không phải là số nguyên tố. Vậy từ đó, liệu có thể suy đoán ''Tất cả an với n ≥5 đều không phải là số nguyên tố''  chăng ? Bằng công cụ máy tính người ta đã kiểm tra được an là hợp số với n = 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 18, 23, 36, 38, 73,...

3. Kết luận

Bài viết đã đưa ra một số tính toán trong các hàm số số học bởi phần mềm Maple như: Tính toán với Phi - hàm Euler, hàm sigma và số hoàn chỉnh, số Mersenne và số nguyên tố Mersen, bậc của số nguyên và căn nguyên thuỷ, phương trình đồng dư, kiểm tra giả thuyết Fermat. Đây là một tư liệu tốt cho những ai quan tâm đến ứng dụng của Maple trong toán học phổ thông.

TÀI LIỆU THAM KHẢO

[1] Phạm Huy Điển (2002), Tính toán, lập trình và giảng dạy toán học trên Maple, NXB Khoa học  và Kỹ thuật, Hà Nội.

[2] Hà Huy Khoái, Phạm Huy Điển (2003), Số học thuật toán, NXB Đại học Quốc gia Hà Nội.

 [3] Phạm Minh Hoàng (2005), Maple và các bài toán ứng dụng, NXB Khoa học và Kỹ thuật. Tp. Hồ Chí Minh.