Tải bản đầy đủ (.doc) (53 trang)

Về mật mã khóa công khai

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (504.63 KB, 53 trang )

1

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC VINH

ĐOÀN MINH KẾ

VỀ MẬT MÃ KHÓA CÔNG KHAI

LUẬN VĂN THẠC SĨ TOÁN HỌC

NGHỆ AN – 2015


2

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC VINH

ĐOÀN MINH KẾ

VỀ MẬT MÃ KHÓA CÔNG KHAI
CHUYÊN NGÀNH: ĐẠI SỐ VÀ LÝ THUYẾT SỐ

Mã số: 60 46 01 04

LUẬN VĂN THẠC SĨ TOÁN HỌC

Người hướng dẫn khoa học
PGS.TS. NGUYỄN THÀNH QUANG


NGHỆ AN – 2015


3

MỤC LỤC
TRANG
MỞ ĐẦU

1

CHƯƠNG I

3

MỘT SỐ KIẾN THỨC SỐ HỌC CƠ SỞ
1.1
1.2
1.3

Phi hàm Euler và ứng dụng
Kiểm tra nguyên tố trên Maple
Biểu diễn số nguyên
CHƯƠNG II

3
9
17
23


MỘT SỐ ỨNG DỤNG CỦA SỐ HỌC TRONG LÝ
THUYẾT MẬT MÃ
2.1
2.2
2.3

Mật mã học
Mật mã khoá công khai
Hệ mã RSA
KẾT LUẬN
TÀI LIỆU THAM KHẢO

23
30
38
49
50

MỞ ĐẦU
Cho đến những năm 70 của thế kỷ XX, Số học vẫn được xem là một
trong những ngành lý thuyết thuần túy và đẹp đẽ nhất của toán học ([4]).


4

Máy tính không những phát huy mọi vẻ đẹp truyền thống của Số học mà còn
triển khai ra những ứng dụng đang và sẽ có cho chúng ta trong thế kỷ XXI.
Một trong những ứng dụng nổi bật của Số học đó là thuật toán phân
tích mỗi số tự nhiên thành tích các thừa số nguyên tố chính là nguyên tắc cơ
bản của khóa mật mã công khai. Vì vậy, ngày nay việc nghiên cứu về số

nguyên tố càng được kích thích bởi sự kiện là các số nguyên tố tỏ ra rất có
ích trong việc mã hóa và giải mã các thông tin. Tính bảo mật và an toàn của
hệ mật mã RSA (do ba nhà khoa học của Học viện Công nghệ Massachusetts
công bố năm 1978) được đảm bảo bằng độ phức tạp của bài toán số học
phân tích một số nguyên thành tích các thừa số nguyên tố. Nói khác đi, vấn
đề thời gian tiêu tốn cho việc chạy máy tính để thực hiện bài toán phân tích
một số nguyên đủ lớn thành tích các thừa số nguyên tố, được sử dụng làm
chỉ tiêu định lượng đánh giá độ an toàn của hệ mã RSA.
Thuật toán mật mã khóa công khai được thiết kế đầu tiên bởi James H.
Ellis, Clifford Cocks, và Malcolm Willa vào đầu thập kỷ 1970. Thuật toán
sau này được phát triển và biết đến dưới tên Diffie-Hellman và là một trường
hợp đặc biệt của RSA ([6]).
Mật mã khóa công khai là một dạng mật mã hóa cho phép người sử
dụng trao đổi các thông tin mật mà không cần phải trao đổi
các khóa chung bí mật trước đó. Điều này được thực hiện bằng cách sử dụng
một cặp khóa có quan hệ số học với nhau là khóa công khai và khóa cá
nhân (hay khóa bí mật).
Thuật ngữ mật mã hóa khóa bất đối xứng thường được dùng đồng
nghĩa với mật mã hóa khóa công khai mặc dù hai khái niệm không hoàn toàn
tương đương. Có những thuật toán mật mã khóa bất đối xứng không có tính
chất khóa công khai và bí mật như đề cập ở trên mà cả hai khóa (cho mã hóa
và giải mã) đều cần phải giữ bí mật.


5

Với những lý do trên, chúng tôi lựa chọn đề tài luận văn ‘‘Về mật mã
khóa công khai’’ nhằm tìm hiểu sâu hơn những ứng dụng của Số học có liên
quan đến lĩnh vực đề tài luận văn quan tâm.
Luận văn gồm hai chương. Chương 1 trình bày các kiến thức số học

được ứng dụng trong lý thuyết mật mã như: Phi hàm Euler và ứng dụng,
định lý số dư Trung Quốc, số giả nguyên tố và số Camichael. Chương 2 trình
bày tổng quan về mật mã học, về mật mã khóa công khai, hệ mã RSA và ứng
dụng của Số học vào các hệ mã khóa công khai.
Luận văn này được hoàn thành dưới sự hướng dẫn tận tình và chu đáo
của PGS.TS. Nguyễn Thành Quang. Nhân dịp này tôi xin bày tỏ lòng kính
trọng và biết ơn sâu sắc tới thầy giáo hướng dẫn khoa học, người đã dành
nhiều thời gian và công sức cho việc giúp đỡ tôi hoàn thành luận văn này.
Nhân dịp này tôi xin gửi lời cảm ơn đến các thầy cô giáo thuộc
chuyên ngành Đại số và Lý thuyết số, Khoa Sư phạm Toán học, Phòng Đào
tạo Sau Đại học - Trường Đại học Vinh, những người đã tận tình giảng dạy
và tạo mọi điều kiện thuận lợi cho tôi hoàn thành khóa học.
Tôi xin gửi lời cảm ơn đến Ban giám hiệu Trường THPT Lương Thế
Vinh – Sở Giáo dục và Đào tạo Quảng Bình và các đồng nghiệp, đã tạo điều
kiện thuận lợi để tôi hoàn thành nhiệm vụ học tập. Tôi xin chân thành cảm
ơn bạn bè, gia đình đã động viên và giúp đỡ tôi trong suốt khóa học.
Mặc dù đã có nhiều cố gắng, song luận văn này không tránh khỏi
những thiếu sót. Tác giả mong muốn nhận được sự góp ý chân thành của
các thầy cô giáo và đồng nghiệp.
Nghệ An, tháng 10 năm 2015
TÁC GIẢ

CHƯƠNG 1
MỘT SỐ KIẾN THỨC SỐ HỌC CƠ SỞ


6

1.1. Phi hàm Euler và ứng dụng
1.1.1. Định nghĩa. Phi hàm Euler ϕ là hàm số số học có giá trị tại số tự

nhiên n ≠ 0 bằng số các số tự nhiên không vượt quá n và nguyên tố cùng
nhau với n :

ϕ ( n) =

∑ 1.

1≤ k ≤ n
( k ,n ) =1

Hàm số ϕ trong tiếng Anh còn được gọi là hàm "totient". Hàm này
thường được gọi là hàm số Euler, theo tên nhà toán học Thụy Sỹ Leonhard
Euler, người đã nghiên cứu và ký hiệu nó bằng chữ cái Hy Lạp: Phi ( ϕ
). Đối totient của n được định nghĩa là n − ϕ (n), nghĩa là số các số nguyên
dương nhỏ hơn hoặc bằng n mà không nguyên tố với n .
Hàm ϕ có nhiều ứng dụng vì nó là kích thước (cấp) của nhóm nhân
các lớp khả nghịch của vành Zn các số nguyên modn. Hơn nữa, đối với hàm
Euler ta có công thức Gaus, còn gọi là công thức tổng trải, trên các ước
dương d của n :

å j (d ) = n .
dn

1.1.2. Định lý Euler [7]. Nếu n > 1 là số nguyên bất kỳ và a là số nguyên
sao cho a và n nguyên tố cùng nhau, thì:
aϕ ( n ) ≡ 1(mod n) .

Định lý Euler là tổng quát hóa của Định lý bé Fermat, vì nếu n = p là
số nguyên tố thì ϕ ( p ) = p − 1 .
1.1.3. Định lý bé Fermat [7]. Nếu p là số nguyên tố và a là số nguyên

không chia hết cho p thì a p −1 ≡ 1(mod p) . Nói cách khác, nếu p là số nguyên
tố và a là số nguyên bất kỳ thì a p ≡ a(mod p) .


7

1.1.4. Giả thuyết Trung Quốc. Một cách độc lập với Định lý bé Fermat, các
nhà toán học Trung quốc đã đưa ra một giả thuyết (thường gọi là Giả thuyết
Trung Quốc) nói rằng: p là một số nguyên tố khi và chỉ khi 2 p º 2(mod p ) .
Quả là, nếu p là số nguyên tố, thì 2 p º 2(mod p ) vì đây là trường hợp đặc biệt
của Định lý bé Fermat. Song mệnh đề ngược lại (nếu 2 p º 2(mod p) thì p là
số nguyên tố) là sai. Chẳng hạn, 2341 º 2(mod 341) , nhưng

341 =

11.31 là hợp số. Như vậy, mệnh đề ngược lại của Định lí Fermat bé không
đúng. Theo Định lý Fermat bé, nếu n là số nguyên tố và b là số nguyên tùy
ý, thì b n ≡ b(mod n) . Như vậy, với n là một số tự nhiên lớn hơn 1 mà có một
số nguyên b nào đó sao cho đồng dư thức trên không xảy ra thì n là hợp số,
còn trong trường hợp đồng dư thức trên xảy ra thì chưa thể nói gì về tính
nguyên tố của n . Tuy nhiên, qua nhiều thống kê cho thấy rằng nếu một số
nguyên thỏa mãn kết luận của Định lí Fermat bé thì "có nhiều khả năng" nó
là số nguyên tố. Do đó, dẫn xuất đến khái niệm sau.
1.1.5. Số giả nguyên tố. Giả sử b là một số nguyên dương cho trước. Nếu
n là hợp số nguyên dương và b n ≡ b(mod n) , thì n được gọi là số giả nguyên
tố cơ sở b . Trong trường hợp gcd(n, b) = 1 , người ta dùng điều kiện tương
đương sau:
b n −1 ≡ 1(mod n) .

Ví dụ. Số nguyên 561 là số giả nguyên tố cơ sở 2. Thật vậy, ta có

561 = 3.11.17 và gcd(3,2) = gcd (11,2) = gcd(17,2) = 1,
do đó áp dụng Định lý Fermat bé, ta có
2560 = (22 )280 ≡ 1(mod 3)
2560 = (216 )35 ≡ 1(mod17)
2560 = (210 )56 ≡ 1(mod11)

Từ đó suy ra, 2560 ≡ 1(mod 561).


8

Nói chung số giả nguyên tố ít hơn nhiều so với các số nguyên tố.
Chẳng hạn, có tất cả 455052512 số nguyên tố bé hơn 10 10, nhưng chỉ có
14884 số giả nguyên tố cơ sở 2 trong khoảng đó. Cụ thể hơn, có 5 số nguyên
tố bé hơn 12 là 2,3,5,7,11 nhưng không có số giả nguyên tố cơ sở 2 trong
khoảng đó.
Sự kiện này giải thích điều nói ở trên: Các số thoả mãn Định lý
Fermat bé có nhiều khả năng là số nguyên tố. Tuy nhiên, đối với mọi cơ sở
tuỳ ý, số các số giả nguyên tố là vô hạn. Chẳng hạn, ta chứng minh điều đó
với cơ sở 2.
1.1.6. Định lý. Nếu n là số giả nguyên tố cơ sở 2 thì m = 2 n - 1 cũng là số

giả nguyên tố cơ sở 2. Từ đó suy ra có vô hạn số giả nguyên tố cơ sở
2.
Chứng minh. Giả sử n là một số giả nguyên tố cơ sở 2, ta sẽ chứng minh
rằng số nguyên m = 2n − 1 > n cũng là số giả nguyên tố cơ sở 2. Thật vậy,
theo giả thiết, ta có n là hợp số, chẳng hạn n = dt ,1 < d , t < n. Do đó
m = 2n − 1 = (2 d )t − 1 = (2d − 1) ( (2 d )t −1 + (2 d )t −2 + L + 1) .

Từ đó, suy ra m là hợp số. Do n là số giả nguyên tố cơ sở 2, nên có

2n ≡ 2(mod n), hay tồn tại một số tự nhiên k sao cho

2n − 2 = kn. Ta có

m = 2n − 1, hay m − 1 = 2n − 2 = kn. Vì vậy, 2m−1 − 1 = 2kn − 1 = (2n )k − 1 chia hết

cho m = 2n − 1 , tức 2m−1 ≡ 1(mod m). Vậy m là số giả nguyên tố cơ sở 2. ▄
1.1.7. Số Carmichael. Hợp số n thỏa mãn đồng dư thức b n −1 ≡ 1(mod n) với
mọi số nguyên dương b sao cho gcd(n, b) = 1 được gọi là số Carmichael.
Ví dụ. Số nguyên 561 là một số Carmichael. Thật vậy, nếu gcd(b, 561) = 1
thì gcd(b,3) = gcd(b,11) = gcd(b,17) = 1, do đó áp dụng Định lý Fermat bé,
ta có


9

b560 = (b 2 ) 280 ≡ 1(mod 3)
b560 = (b10 )56 ≡ 1(mod11)
b560 = (b16 )35 ≡ 1(mod17).

Từ đó suy ra, b560 ≡ 1(mod 561).
Giả thuyết: Tồn tại vô hạn số Carmichael, mới được chứng minh rất
gần đây bởi R. Alford, A. Granville, C. Pomarance, 1993 (xem [4,7]).
Định lý sau đây cho một cách tìm số Carmichael.
1.1.8. Định lý. Số tự nhiên n là số Carmichael khi và chỉ khi, n = q1q2 ...qn ,
trong đó q j ,( j = 1, 2,..., n), là các số nguyên tố khác nhau thoả mãn q j − 1 là
ước của n − 1 .
Chứng minh. Thật vậy, giả sử b là số nguyên dương sao cho (b, n) = 1. Khi đó
(b, q j ) = 1,


do đó

b

q j −1

≡ 1(mod q j ). Vì

q j −1 là ước của n − 1 nên

b n −1 ≡ 1(mod q j ), do đó ta có b n −1 ≡ 1(mod n). Vậy n là số Carmichael. ▄

Phần đảo lại của định lý trên có thể tìm hiểu ở công trình: M.O. Rabin
(1980), Probabilistic algorithms for testing primality, Journal of Number
Theory, Vol.12, pp. 128-138.
1.1.9. Số giả nguyên tố mạnh. Số nguyên n được gọi là số giả nguyên tố
mạnh cơ sở b nếu nó là hợp số và trải qua được kiểm tra Miller cơ sở b theo
nghĩa sau:
Giả sử n là số nguyên dương lẻ, n − 1 = 2s t , trong đó s là số nguyên
không âm, t là số nguyên duơng lẻ. Ta nói n trải qua được kiểm tra Miller
cơ sở b , nếu hoặc

bt ≡ 1(mod n) hoặc

j
b 2 t ≡ −1(mod n) với j nào đó,

0 ≤ j ≤ s − 1.

Như vậy, các số giả nguyên tố mạnh lại còn ít hơn các số giả nguyên

tố. Tuy nhiên, ta vẫn có định lý sau
1.1.10. Định lý. Tồn tại vô số số giả nguyên tố mạnh cơ sở 2.


10

Chứng minh. Thật vậy, giả sử n là số giả nguyên tố cơ sở 2. Khi đó , với số
nguyên lẻ k nào đó, ta có 2n −1 − 1 = nk . Đặt N = 2n−1 − 1, khi đó có ước là 2d
– 1, với d là ước số nào đó của n. Mặt khác
N − 1 = 2n − 2 = 2(2n −1 − 1) = 2nk , 2

N −1
2

= 2nk = (2 n ) k ≡ 1(mod N ).

Vậy với mỗi số giả nguyên tố n , ta xây dựng được số giả nguyên tố mạnh
N và các số n khác nhau cho ta các số N khác nhau. Định lý được chúng
minh, bởi vì ta có vô số giả nguyên tố cơ sở 2. ▄
1.1.11. Định lý phần dư Trung Hoa (Chinese Remainder Theorem) [4, 7].
Giả sử m1 ,m2 ,...,mn là các số nguyên dương, nguyên tố cùng nhau từng đôi
một. Khi đó, hệ phương trình đồng dư bậc nhất một ẩn
 x ≡ b1 (mod m1 )
 x ≡ b (mod m )

2
2

M


 x ≡ bn (mod mn )

có nghiệm duy nhất theo môđun M = m1m2L mn .
Định lý số dư Trung Quốc là tên người phương tây đặt cho định lý
này. Người Trung Quốc gọi nó là Bài toán Hàn Tín điểm binh. Hàn Tín là
một danh tướng thời Hán Sở, từng được phong tước vương thời Hán Cao Tổ
Lưu Bang đang dựng nghiệp. Sử ký Tư Mã Thiên viết rằng Hàn Tín là tướng
trói gà không nổi, nhưng rất có tài thao lược quân sự. Tục truyền rằng khi
Hàn Tín điểm quân số, ông cho quân lính xếp hàng 3, hàng 5, hàng 7 rồi báo
cáo số dư. Từ đó ông tính chính xác quân số đến từng người. Gần đây, Định
lý số dư Trung Quốc có nhiều ứng dụng trong các bài toán về số nguyên lớn
áp dụng vào Lý thuyết mật mã.
Trong Định lí phần dư Trung Hoa, có điều kiện m1 , m2 ,..., mn là các số
nguyên dương đôi một nguyên tố cùng nhau. Câu hỏi đặt ra là nếu


11

m1 , m2 ,..., mn không thoả mãn điều kiện đôi một nguyên tố cùng nhau thì kết

quả định lí này sẽ như thế nào?
1.1.12. Định lý (Định lý phần dư Trung Hoa mở rộng) [4]. Cho n số nguyên
dương m1 ,m2 ,L ,mn và a1 ,a2 ,...,an là các số nguyên dương bất kì. Khi đó hệ
phương trình đồng dư tuyến tính
 x ≡ a1 (mod m1 )
 x ≡ a (mod m )

2
2


M

 x ≡ an (mod mn )

có nghiệm khi và chỉ khi ai ≡ a j (mod(mi , m j )) với mọi i, j thoả mãn
1 ≤ i < j ≤ n.

1.1.13. Phân tích Fermat.
Cho n là số nguyên dương lẻ. Giả sử n = ab với a,b là các số nguyên,
do n lẻ nên a,b đều lẻ. Vì vậy, chúng ta có thể viết n = x2 - y2 với x =

y=

a+b
,
2

a −b
do a,b là các số nguyên lẻ nên x, y cũng là các số nguyên. Để tìm
2

nghiệm của phương trình n = x 2 − y 2 , quy trình được bắt đầu từ số nguyên
nhỏ nhất m ≥ n và tìm nghiệm trong dãy số sau:
m2 - n, (m + 1)2 - n, (m+2)2 – n, ...
dãy số sẽ dừng do m không thể vượt quá
2

n+1
. Thật vậy:
2

2

 n +1
 n −1

÷ −n =
÷.
 2 
 2 

Tất cả số hạng của biểu thức này là số nguyên. Tuy nhiên phương
pháp này hiệu quả nhất khi n là tích của hai số nguyên tố gần nhau.


12

Ví dụ. n = 3811. Ta bắt đầu tính và tìm nghiệm trong chuỗi như sau:
622 – 3811 = 33
632 – 3811 = 159
642 – 3811 = 285
652 – 3811 = 414
662 - 3811= 545
672 – 3811 = 678
682 - 3811= 813
692 - 3811= 950
702 – 3811 = 1089 = 332
Vậy ta được kết quả phân tích: 3811 = 702 - 332 = (70 + 33) (70-33) = 103.37.

1.2. Kiểm tra nguyên tố trên Maple
1.2.1. Sơ lược về Maple. Ngày nay máy tính đã thâm nhập vào hầu hết các

lĩnh vực khoa học và đời sống. Nhiều chương trình ứng dụng đã được phát
triển liên quan tới quản lý dữ liệu, in ấn, đồ họa, xử lý ảnh,… Riêng đối với
ngành toán đã có những sản phẩm mang tính phổ dụng như Mathematica,
Matlat, Maple,… và nhiều chương trình chuyên dụng cho từng bộ môn toán
học. Những phần mềm trên giúp ích rất nhiều cho việc giảng dạy toán, học
toán cũng như việc ứng dụng toán trong các ngành kỹ thuật, kinh tế và vì thế
tại các nước phát triển chúng đã trở thành cẩm nang của nhiều sinh viên và
các nhà khoa học. Maple cho ta một công cụ tốt để triển khai các thuật toán
có độ phức tạp cao mà không có mẹo mực thủ công nào có thể thay thế
được. Maple có đặc tính ưu việt là có ngôn ngữ câu lệnh rất giống với ngôn
ngữ toán học thông thường, dễ sử dụng, đòi hỏi cấu hình của máy không lớn,
đáp ứng nhu cầu tính toán của nhiều đối tượng.
Maple là một hệ phần mềm chuyên dụng cho công việc tính toán bao
gồm các tính toán thuần tuý bằng ký hiệu toán học, các tính toán số và các


13

tính toán bằng đồ thị. Sản phẩm này do Trường Đại học Tổng hợp Waterloo
(Canada) và Trường Đại học kỹ thuật Zurich (ETZ) xây dựng và đưa vào
thương mại đầu tiên năm 1985. Qua nhiều lần cải tiến Maple đã được phổ
biến rộng rãi trên thế giới. Dưới đây chúng tôi giới thiệu sơ lược các tính
năng của Maple thông qua một số tính toán cụ thể về phương diện đại số và
số học.
1.2.2. Các quy định chung của Maple
a) Cụm xử lý (Execution group)
Cụm xử lý là thành phần tính toán cơ bản trong môi trường làm việc
của Maple. Mọi tính toán đều thực hiện trong cụm xử lý. Trong cụm xử lý có
chứa lệnh của Maple cùng với kết quả tính toán, kể cả đồ thị, … Trong
Maple có thể nhận biết một cụm xử lý bằng dấu: [ >

b) Lệnh của Maple
Lệnh của Maple được đưa vào trang công tác sau dấu nhắc lệnh
(command prompt) trong các cụm xử lý. Lệnh thực hiện các phép toán và
các biểu thức số học được viết trực tiếp như khi nhập văn bản thông thường.
Ví dụ, để tính 99 + 452 ta viết câu lệnh như sau:
[> 99+452;
Tiếp đến, nhấn phím [Enter] cho thực hiện lệnh, ta sẽ thấy kết quả là: 551
Ký hiệu của các phép toán trong Maple:
Phép nhân được biểu thị bởi dấu *
Phép chia được biểu thị bởi dấu /
Phép luỹ thừa được biểu thị bởi dấu ^
Phép khai căn bậc hai được biểu thị bởi dấu Sqrt (viết tắt của square
root).
Kết thúc của dòng lệnh phải là dấu chấm phẩy “;” hoặc dấu hai chấm
“:” và lệnh được thực hiện bằng cách nhấn phím [ Enter] khi con trỏ ở cuối


14

dòng lệnh. Nếu dòng lệnh kết thúc bằng dấu chấm phẩy thì kết quả của nó sẽ
được hiển thị trên màn hình sau khi lệnh được thực hiện. Nếu kết quả tính
toán là những biểu thức cồng kềnh chiếm nhiều chỗ hoặc là những kết quả
tính toán trung gian không cần cho hiển thị, thì ta kết thúc câu lệnh bằng dấu
hai chấm.
Nếu có nhiều dòng lệnh trong một cụm xử lý thì việc nhấn phím
[Enter] sau một dòng lệnh nào đó (trong số các lệnh) cũng tức là thực hiện
tất cả các dòng lệnh trong cụm xử lý đó.
Lệnh của Maple có 2 loại: “ trơ” và “trực tiếp”. Lệnh trực tiếp cho ta
ngay kết quả của lệnh; còn lệnh trơ chỉ cho ra biểu thức tượng trưng và khi
cần biết giá trị đích thực của biểu thức đó ta phải dùng thêm lệnh lấy giá trị

của biểu thức Value (%). Maple ngầm hiểu ký hiệu % là biểu thức ngay
trước đó. Lệnh trơ và lệnh trực tiếp sai khác nhau chỉ ở chữ cái đầu tiên.
Lệnh trực tiếp có chữ cái đầu là chữ thường, còn lệnh trơ có chữ cái đầu là
chữ hoa. Các lệnh trơ cho phép ta tiết kiệm thời gian nhờ tránh được các tính
toán trung gian không cần thiết.
c) Kết quả của Maple
Sau khi nhấn phím [Enter] ở cuối dòng lệnh trong một cụm xử lý thì
kết quả tính toán sẽ được hiện ra ngay dưới dòng lệnh. Kết quả của lệnh sẽ là
số, giá trị logic: đúng (true) – sai (false), biểu thức toán học, hoặc là đồ thị.
Ghi nhớ : • Cuối dòng lệnh phải là dấu chấm chấm phẩy ; hoặc dấu hai
chấm : Nếu không có một trong hai dấu kết thúc của dòng lệnh này thì máy
sẽ báo lỗi (Error) và không thực hiện tính toán.

• Muốn thực hiện dòng lệnh nào thì đưa con trỏ về sau dấu kết thúc
dòng lệnh đó và nhấn phím [Enter].

• Thực hiện dòng lệnh theo đúng trình tự trước sau vì một số tính
toán trong các bước sau có thể yêu cầu kết quả từ các bước trước.


15

1.2.3. Kiểm tra nguyên tố. Muốn kiểm tra một số nguyên dương a có phải
là số nguyên tố không ta dùng lệnh:
[>isprime(a);
Ví dụ:
[>isprime(3023057);
true
[>isprime(289309129039);
False

1.2.4. Phân tích ra thừa số nguyên tố
Muốn phân tích số a thành tích các thừa số nguyên tố, ta dùng lệnh:
[>ifactor(a);
Ví dụ:
[>ifactor(720);
25 .32.5
1.2.5. Kiểm tra nguyên tố theo Định lý Wilson
Bước 1: Nhập các số nguyên dương cần kiểm tra
[>p: = 2311; q: = 24253;
p:= 2311
q: = 24253
Bước 2: Kiểm tra điều kiện ( p − 1)! ≡ −1(mod p) có thoả mãn hay không
bằng lệnh
[> evalb ((p-1)! mod p = p – 1) ;
evalb ((q –1)! modq = q –1 ) ;
true
false
Như vậy, p là số nguyên tố, còn q không phải là số nguyên tố.
1.2.6. Kiểm tra giả thuyết: Tích của các số nguyên tố liên tiếp bắt đầu từ 3
trừ đi 2 là số nguyên tố. Nói khác đi, nếu ký hiệu pk là số nguyên tố thứ k (kể
từ số 3 trở đi) thì số An = p1 p2 p3... pn − 2 là số nguyên tố với mọi n >2.


16

Trong tuyển tập 30 năm báo Toán học và Tuổi trẻ, Nhà xuất bản
Giáo dục, Hà Nội, 1997 viết rằng: “Bằng cách thử ta thấy các số A 3 , A4 ,
A5 , A6 , A7 đều là số nguyên tố. Tuy nhiên muốn kiểm tra A 8 thì cần phải
làm 300 phép chia và để kiểm tra A 9 cần tới 1300 phép chia, tức là mất
vài buổi làm tính”.

Với Maple, ta dễ dàng kiểm định giả thuyết này nhờ nhận biết được các số
A7 = 3.5.7.11.13.17.19 – 2
A8 = 3.5.7.11.13.17.19. 23 – 2
là số nguyên tố bằng lệnh ifactor:
[> ifactor(3*5*7*11*13*17*19 –2);
(72747673)
[> ifactor(3*5*7*11*13*17*19*23 –2);
(1673196523)
Ta tiếp tục thử với số tiếp theo là
A9 = 3.5.7.11.13.17.19. 23.29 – 2
[> ifactor(3*5*7*11*13*17*19*23*29 –2);
(43)(167)(450473)
Như vậy, A9 là hợp số và ta có câu trả lời phủ định cho giả thuyết trên.
1.2.7. Kiểm tra số giả nguyên tố. Muốn kiểm tra số n có phải là số giả
nguyên tố cơ sở b hay không, ta cần chỉ ra rằng n không phải là số nguyên tố
và sau đó kiểm tra điều kiện

b n − b ≡ 0(mod n) có được thỏa mãn hay

không. Thủ tục được tiến hành:
+ Nhập vào hai số nguyên n, b bằng các lệnh
[> n:=56348327841; b:=2;
n:=56348327841
b:= 2
+ Kiểm tra xem n có là số nguyên tố hay không (nếu n là số nguyên tố thì nó
không phải là số giả nguyên tố)
[ > isprime (n);


17


false
+ Nếu kết quả là “false” thì tiến hành kiểm tra đồng dư thức có thỏa mãn
hay không
[> is (b^n - bmod n = 0);
Nếu như hàm trả lời giá trị “True” thì n là số giả nguyên tố cơ sở b.
[> n:=1373653; b:=3;
n:= 1373653
b:= 3
[ > isprime (1373653);
false
[> is (3^1373653 – 3 mod 1373653 = 0);
true
Kết quả cho thấy 1373653 là số giả nguyên tố cơ sở 3
1.2.8. Kiểm tra số Carmichael. Trước hết ta nhập vào số nguyên dương n
cần kiểm tra
[> n:= 6601;
n := 6601
Kiểm tra xem số n có phải là số nguyên tố không?
[> isprime(n);
false
Nếu n là số nguyên tố thì nó không phải là số Carmichael, ngược lại thì ta
tiếp tục phân tích số n ra thừa số nguyên tố.
[> L:= ifactor(n);
L := (7) (23) (41)
Nếu có một thừa số mang số mũ lớn hơn 1 thì kết luận ngay n không
phải là số Carmichael, ngược lại thì các thừa số của n là khác nhau cho nên
ta kiểm tra tiếp. Trước hết ta lập danh sách các thừa số nguyên tố q = [q 1, q2 ,
…, qk] bằng lệnh :



18

[> q:= [7,23,41];
q := [7, 23, 41]
Sau đó tiến hành kiểm tra tính chia hết của các phép chia số (n – 1) cho
các số (qi - 1), i = 1,2,…, k. Việc này cũng tương đương với việc xem các thành
phần trong danh sách các phần dư có bằng 0 cả hay không, bằng lệnh
[> [seq(irem(n-1 , q[i]-1), i=1…nops(q))];
[0; 0, 0]
Nếu trong danh sách đó có thành phần khác 0 thì n không phải số
Carmichael, ngược lại cho ta kết quả là số Carmichael. Kết quả trên cho ta
thấy số 6601 là số Carmichael.
1.2.9. Kiểm tra số giả nguyên tố mạnh
Bước 1: Phân tích số n ra thừa số nguyên tố .
[> ifactor(n -1);
Bước 2: Từ kết quả phân tích trên ta biết rằng n -1 có thể viết dưới dạng n 1 = 2st (s là số tự nhiên bất kỳ, t là một số lẻ). Ta kiểm tra điều kiện:
[>is(b&^t mod n= 1) ;
Nếu điều kiện trên nghiệm đúng (lệnh cho giá trị true ) thì n là số giả
nguyên tố mạnh cơ sở b, ngược lại ta kiểm tra điều kiện sau :
[> is(b&^t-1 mod n = 0) ;
Nếu lệnh cho giá trị true thì n là số giả nguyên tố mạnh cơ sở b .
j

Nếu kết quả là false ta tiếp tục kiểm tra điều kiện b 2 t + 1 = 0(mod n)
có được thoả mãn với một j nào đó trong khoảng từ 0 đến s - 1 hay không.
Nếu có một j như vậy thì kết luận n là số giả nguyên tố mạnh cơ sở b, ngược
lại ta kết luận không phải. Có thể thực hiện điều nay bằng lệnh sau đây:
[>seq (b&^( (2^j)*t)+1 mod n, j= 0…s-1) ;



19

Kết quả của lệnh là một dãy bao gồm s số tự nhiên, nếu có một số
trong dãy đó bằng 0 thì kết luận n là số giả nguyên tố mạnh cơ sở b, ngược
lại là không phải.
Ví dụ. Kiểm tra xem số 25326001 có phải là số nguyên tố mạnh cơ sở 2 bằng
[> n:=25326001; b:=2;
n := 25326001
b := 2
[> isprime(n);
false
[> factor(n-1);
(2)4 (3)3 (5)3 (7) (67)
Ta có:
[> s:=4; t:=3^3*5^3*7*67;
s := 4
t :=1582875
[> is(b&^t mod n = 1);
false
Ta kiểm tra tiếp
[> is(b&^t-1 mod n = 0);
false
[> seq (b&^ ((2^j)*t)+1 mod n, j = 0..s-1);
0, 2, 2, 2
Như vậy số 25326001 là số giả nguyên tố mạnh cơ sở 2. Với b = 3; 5 ta
cũng có kết quả tương tự . Nhưng với b = 7 ta có:
[> n:=25326001; b:=7;
n := 25326001
b := 7



20

[> s:=4; t:=3^3*5^3*7*67;
s := 4
t :+ 1582875
[> is(b&^t mod n = 1);
false
[> is(b&^t-1 mod n = 0);
false
[> seq (b&^ ((2^j)*t)+1 mod n, j= 0.. s-1);
19453142, 16857741, 11448588, 10127251
Vậy, số 25326001 là số giả nguyên tố mạnh cơ sở 2,3,5 nhưng không là số
giả nguyên tố mạnh cơ sở 7.

1.3. Biểu diễn số nguyên
1.3.1. Định lý. Giả sử g là số nguyên lớn hơn 1. Khi đó, mọi số tự nhiên
n ≠ 0 có thể viết duy nhất dưới dạng
n = a k g k + a k −1 g k −1 +  + a1 g + a 0
trong đó a j là các số nguyên, 0 ≤ a j ≤ g − 1, j = 0,1,..., k và a k ≠ 0.
Chứng minh. Ta thực hiện liên tiếp các phép chia cho g cho đến khi xuất
hiện thương bằng 0 thì dừng lại:
n = gq0 + a0,0 ≤ a0 ≤ g − 1
q0 = gq1 + a1,0 ≤ a1 ≤ g − 1
q1 = gq2 + a2,0 ≤ a2 ≤ g − 1
q2 = gq3 + a3,0 ≤ a3 ≤ g − 1
M
qk−1 = g.0 + ak,0 < ak ≤ g − 1


Vì g > 1 , nên ta có
n > q o > q1 > ... > q k −1 > q k = 0.
Vì vậy, quá trình trên phải kết thúc với q k = 0. Thay các q j lần lượt
theo các a j và g ta sẽ thu được cách viết cần có của n .


21

Giả sử ta còn có
n = bl g l + bl −1 g l −1 +  + b1 g + b0
trong đó b j là các số nguyên, 0 ≤ b j ≤ g − 1, j = 0,1,..., l và hệ số đầu tiên
bl ≠ 0. Khi đó, từ đẳng thức
a k g k + a k −1 g k −1 +  + a1 g + a 0 = bl g l + bl −1 g l −1 +  + b1 g + b0
cho ta a 0 = b0 , vì đó là số dư trong phép chia n cho g . Giả sử ta đã có
a0 = b0 , a1 = b1 ,..., as −1 = bs −1 .

Thế thì ta được:
a k g k +  + a s g s = bl g l +  + bs g s .
Từ đó ta có:
a k g k − s +  + a s +1 g + a s = bl g l − s +  + bs +1 g + bs .
Làm như trên ta được a s = bs . Giả sử k > l , tức khắc ta có
a k g k −l +  + a l +1 g l +1 = 0 .
Đẳng

thức

này

trái


với

điều

kiện

a k ≠ 0. Vì

vậy,

k = l và

a j = b j , j = 0,1,..., k . ▄
1.3.2. Hệ cơ số. Từ định lý trên đây, cho phép chỉ bằng g ký hiệu biểu thị g
số tự nhiên đầu tiên 0,1,..., g − 1 , ta có thể biểu diễn được mọi số tự nhiên.
Các ký hiệu này được gọi là các chữ số trong hệ cơ số g . Cho n là số tự
nhiên khác không, khi đó n = a k g k + a k −1 g k −1 +  + a1 g + a 0 , trong đó
a j là các số nguyên, 0 ≤ a j ≤ g − 1, j = 0,1,..., k với hệ số đầu tiên a k ≠ 0.
Ta viết (a k a k −1 ...a1 a 0 ) g để chỉ số n trong hệ cơ số g . Các hệ số a j
được gọi là các chữ số của n trong hệ cơ số g .
Nhận xét. Nếu số nguyên n biểu diễn trong hệ cơ số g có k chữ số thì
g k −1 < n < g k . Do đó, số chữ số của n được tính theo công thức


22

 log n 
k = [log g n] + 1 = 
 +1
 log g 

trong đó ký hiệu log để chỉ lôgarit cơ số e. Trong hệ cơ số tuỳ ý, ta có
k = O(log n).
1.3.3. Hệ đếm thập phân. Hệ cơ số 10 được gọi là hệ thập phân. Trong
tiếng Việt tên của tất cả các số từ 1 cho tới một triệu gồm có 14 từ, chỉ các
số 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 1000, 10 000, 1000 000. Ngoài ra, để cho
dễ đọc một số từ đã được biến thể khi ghép: một thành “mốt”, năm thành
“lăm”, mười thành “mươi”. Cơ sở của cách tạo từ ở đây là số 10 và vì vậy
hệ thống danh pháp của chúng ta là hệ đếm thập phân. Sỡ dĩ số 10 có vai trò
đặc biệt là vì hai bàn tay chúng ta có 10 ngón. Chẳng hạn, đối với số 1994
trong hệ thập phân, ta có:
1994 = 1.103 + 9.102 + 9.10 + 4.
1.3.4. Hệ đếm nhị phân. Hệ cơ số 2 được gọi là hệ nhị phân. Hệ nhị phân
có rất nhiều ứng dụng, do chỉ dùng hai kí hiệu 0, 1 và việc tính toán với các
số trong hệ này rất đơn giản. Máy tính sử dụng cách viết nhị phân, lí do là
vì trong máy tính người ta dựa trên một nguyên tắc vật lý đơn giản gọi là
nguyên tắc “ Sáng, Tắt”: bóng đèn sáng chỉ số 1, bóng đèn tắt chỉ số 0. Ta
dùng “bít” để chỉ chữ số nhị phân 0 và1. Một ký hiệu 0 hoặc 1 được gọi là
một bít (viết tắt của chữ “binary digit”). Một số nguyên biểu diễn bởi k chữ
số 1 và 0 được gọi là một số k-bit. Số tự nhiên n sẽ là một số k-bit với k =
[log2n] + 1.
Chẳng hạn đối với số 1994 trong hệ thập phân, có
(1994)10 = (11111001010)2.
Trong máy tính, bên cạnh hệ cơ số 2, người ta còn dùng hệ cơ số 8
hoặc cơ số 16. Lý do chủ yếu là vì chuyển một số viết trong ở cơ số này sang
cơ số kia sao cho trong cơ số 2 sang cơ số 8, ta chỉ việc nhóm từ phải sang


23

trái từng khối 3 chữ số, rồi chuyển số được viết trong khối đó sang dạng thập

phân. Số (11111001010)2 được tách thành các nhóm1, 110, 010, 100, 110. Từ
đó ta được (11111001010)2 = (16236)8.
Máy tính nào cũng có giới hạn về độ lớn của các số có thể đưa vào
tính toán. Giới hạn đó được gọi là cỡ từ của máy, ký hiệu bởi ω . Cỡ từ
thường là một luỹ thừa của 2, chẳng hạn 2 35. Để thực hiện các phép tính số
học với những số nguyên lớn hơn cỡ từ, ta làm như sau: Muốn đưa một số
n > ω vào máy, ta viết n dưới dạng cơ số g và khi đó n được biểu diễn bằng
những số không vượt quá cỡ từ. Ví dụ, nếu cỡ từ của máy là 2 35 thì có thể
đưa một số có độ lớn cỡ 235 -1, ta chỉ cần dùng 10 số nhỏ hơn cỡ từ của máy,
bằng cách biểu diễn n trong cơ số 235. Như đã nói ở trên việc chuyển một
số từ cơ số 2 sang cơ số 235 được thực hiện bằng cách nhóm từng khối 35
chữ số.
1.3.5. Thuật toán nhân nhanh hai số ([4])
Trong những thập kỷ cuối của thế kỷ XX, người ta tìm ra những thuật
toán nhân với độ phức tạp bé hơn nhiều so với cách nhân thông thường. Ta
sử dụng tính
chất phân phối của phép nhân đối với phép cộng các số nguyên:
Nếu a = a1 + a 2 , b = b1 + b2 , thì ab = a1b1 + a 2 b2 + a 2 b1 + a1b2 .
Điều đáng chú ý ở đây là, thay cho việc nhân hai số nguyên n bít, ta
thực hiện việc phép nhân các số có số chữ số nhỏ hơn, cùng với một số phép
cộng. Thực ra điều này không có gì mới, ngay trong quan niệm ban đầu phép
nhân a với b là phép cộng b lần số a. Tuy nhiên để có một thuật toán nhân
nhanh, ta không thể cộng b lần số a, mà phải tìm được một cách tối ưu nào
đó để tách b và a thành những phần nhỏ hơn. Thuật toán dưới đây, cho ta
một cách để làm việc phân chia như vậy.
1.3.6. Thuật toán Karatuba, Ofman ([4])
Giả sử muốn nhân hai số nguyên 2n bit
a = ( a 2 n −1 a 2 n − 2 ...a1 a 0 ) 2



24

b = (b2 n −1b2n − 2 ...b1b0 ) 2 .
Ta viết a = 2 n A1 + A0 , b = 2 n B1 + B0 , trong đó
A1 = (a 2n −1 a 2 n − 2 ...a n ) 2 , A0 = (a n −1 a n − 2 ... a1 a 0 ) 2
B1 = (b2n −1b2 n − 2 ...bn ) 2 , B0 = (bn −1bn − 2 ... b1b0 ) 2 .
Khi đó, ta có:
ab = (2 2 n + 2 n ) A1 B1 + 2 n ( A1 − A0 )( B1 − B0 ) + ( 2 n + 1) A0 B0 .
Như vậy phép nhân các số 2n bit được đưa về việc nhân các số n bit,
cùng với phép cộng, trừ và dịch chuyển (nhân một số với một luỹ thừa bậc n
của 2 được thực hiện bằng cách dịch số đó sang trái n vị trí).
1.3.7. Định lý. Thuật toán Karatuba - Ofman có độ phức tạp là O (n log 2 3 ).
Chứng minh. Gọi M(n) là số các phép tính bit tối đa cần thiết khi thực hiện
nhân hai số nguyên n bit bằng thuật toán Karatuba - Ofman. Từ công thức
ab = (2 2 n + 2 n ) A1 B1 + 2 n ( A1 − A0 )( B1 − B0 ) + ( 2 n + 1) A0 B0 ,
đã nói ở trên, ta có:
M (2n) ≤ 3M (n) + Cn,
trong đó C là một hằng số không phụ thuộc vào n. Đặt c = max(C , M (2)).
Bằng quy nạp, chứng minh được rằng
M (2 k ) ≤ c(3 k − 2 k ).
Từ đó ta có:
 log2 n  +1

M (n) = M (2 log2 n ) ≤ M (2 
≤ 3c3

 log2 n +
 1

≤ 3cn


log2 n

 log2 n  +1

) ≤ c(3 

 log2 n  +1

− 2

)

.

Định lý được chứng minh. 
1.3.8. Định lý ([4]). Với mọi ε > 0 , tồn tại thuật toán nhân sao cho số
phép tính bít M(n) cần thiết để nhân hai số n bit thỏa mãn bất đẳng thức
M (n) < C (ε )n1+ε

với hằng số C (ε ) nào đó độc lập với n.


25


×