PHÂN TÍCH
CÁC SỐ NGUYÊN
CÓ DẠNG 2
n
-1
RA THỪA SỐ NGUYÊN TỐ
ĐẶT VẤN ĐỀ
•
Bài toán phân tích số nguyên ra thừa số nguyên tố đã được ra
đời từ rất lâu và đã cuốn hút nhiều bộ óc vĩ đại nhất trên thế
giới để giải quyết vấn đề về nó.
•
Ngoài ý nghĩa lý thuyết của bản thân bài toán người ta còn
phát hiện nhiều ý nghĩa thực tiễn đặc biệt là trong mật mã.
ĐẶT VẤN ĐỀ
•
Nhiệm vụ chính của đề án là giải quyết bài toán: “Phân tích
các số nguyên có dạng 2
n
-1 ra thừa số nguyên tố (với n
≤
200)”.
•
Chương 1 sẽ trình bầy về các số Mersenne. Chương 2 đề cập
đến bài toán phân tích số nguyên ra thừa số nguyên tố. Chương
3 là phần cơ bản của đề án, trong đó trình bày các tư tưởng của
thuật toán phân tích ra thừa số nguyên tố của những số nguyên
lớn.
CHƯƠNG I. CÁC SỐ MERSENNE
VÀ VIỆC PHÂN TÍCH
•
Các số có dạng M
q
=2
q
-1 (với q là nguyên tố ) được gọi là các số
Mersenne.
•
Nếu q là một số nguyên tố đồng dư modulo 4(q
≡
3(mod 4)) thì
M
q
chia hết cho 2q+1 khi và chỉ khi 2q+1 là nguyên tố; trong
trường hợp này, nếu q>3 thì M
q
là hợp số.
•
Nếu M
q
chia hết cho n thì n
≡
±
1 (mod 8) và
n
≡
1 (mod q)
Phép thử nguyên tố cho các số
Mersenne
•
M
n
=2
n
-1 là nguyên tố khi và chỉ khi M
n
là ước của S
n-2
.
trong đó, dẫy (S
k
)
k>=1
được định nghĩa như sau:
S
0
=4; S
k+1
=S
k
2
-2
CHƯƠNG II. MỘT SỐ PHƯƠNG
PHÁP PHÂN TÍCH SỐ
•
Thuật toán sàng Eratosthenes
•
Phương pháp p-1: Thuật toán
Pollard thứ nhất
•
Phương pháp
ρ
: Thuật toán
Pollard thứ hai
Thuật toán sàng
Eratosthenes
(1) p = 1.
(2) p = p+1.
(3) Tính r = N mod p
—
Nếu r > 0 quay về (2).
—
Ngược lại p là ước của N.
Dừng chương trình.
Phương pháp p-1: Thuật toán
Pollard thứ nhất
(1) Q= , i=1,j=0.
(2) Lấy a ngẫu nhiên trong Z
*
N
, tính b
≡
a
Q
mod N.
(3) Xét đẳng thức b=1. Nếu đúng chuyển sang (4).
Ngược lại chuyển sang (6).
(4) Xét j<log
qi
N. Nếu đúng thì j=i+1, Q=Q|qi, quay về (3).
Ngược lại: chuyển sang (5).
(5) Xét i<k. Nếu đúng thì : i=i+1, j=0, nếu b
≠
1 thì Q=Q.q
i
. Quay
về (4). Ngược lại quay về (1).
(6) Xét gcd (b-1, N)>1. Nếu đúng có ước của n là
gcd (b-1,N). Dừng chương trình. Ngược lại quay về (4)
q
N
k
q
N
k
log
log
2
2
Phương pháp
ρ
: Thuật toán
Pollard thứ hai
(1) i=0
(2) i=i+1
(3) Xét gcd((x
2i
- x
i
)mod N,N)>1
- Nếu đúng, ta có gcd((x
2i
- x
i
)mod N,N).
Dừng chương trình.
- Ngược lại quay về (2).
CHƯƠNG III. XÂY DỰNG PHẦN MỀM
PHÂN TÍCH CÁC SỐ 2
n
-1
•
Sơ đồ xuất phát
•
Phân tích hệ thống
•
Cài đặt chương trình
•
Sơ đồ khối của các modules trong
chương trình
Sơ đồ xuất phát
T
Begin
Nhập N
(hợp số)
Q=2
a=Random(N)
d=gcd(a-1, N)>1
a≡a
Q
mod N
d là ước của N
Không phân tích
được
F
Q<Q
0
Q=Q+1
F
T
Phân tích hệ thống
•
Khai báo số lớn
Cho q>0 khi đó ∀N, tồn tại duy nhất một
bộ n
0
, n
1
, ,n
k
, với 0≤n
i
<q, sao cho
N=n
0
+n
1
q+n
2
q
2
+ +n
k
q
k
(1)
(1) được gọi là biểu diễn q phân của số N.
•
Nhận xét: Như vậy, muốn biểu diễn N ta chỉ cần
biết bộ (n
0
, n
1
, ,n
k
). Nếu q là một số nhỏ thì việc
tìm ra các n
i
tương đối dễ dàng; ở đây chúng ta
chọn q=2
16
=65536.
Phép cộng số lớn
Cho 2 số lớn X và Y:
X=(x
0
, x
1
, , x
n
)
Y=(y
0
, y
1
, , y
n
), thì Z=X+Y=
= ( (x
0
+y
0
) mod q , (x
1
+y
1
+nho
0
) mod q, ,
(x
n
+y
n
+nho
n-1
) mod q )
trong đó nho
i
=(x
i
+y
i
+nho
i-1
)/q.
Phép nhân số lớn
Cho các số lớn X và Y. Tích Z của hai số này được định nghĩa
như sau:
Phép chia số lớn
•
Định lý: Cho X<qY. Giả sử X=x
0
+
+x
n
q
n
+x
n+1
q
n+1
, và Y=y
0
+ +y
n
q
n
. Nếu x
div y=q thì
X div Y= q hoặc q-1
Định lý là cơ sở giúp ta đoán nhanh
thương của 2 số lớn X/Y với điều kiện
X<qY.
r
r
r
r
bb
bbbbb
B
aaaaa ) ().(
22
2 22
1
0
2
210
==
++++
Phép luỹ thừa
Tư tưởng cơ bản của phép luỹ thừa a
B
mod N là
Nếu B=b
0
+b
1
2+b
2
2
2
+ +b
r
2
r
thì
Cài đặt chương trình
•
Mô tả quá trình thực hiện
•
Sơ đồ tính toán
Mô tả quá trình thực hiện
(0) Xây dựng một chương trình tìm và ghi lên một tệp
các số nguyên tố nhỏ hơn 2
16
.
(1) Tìm các ước nguyên tố nhỏ của M
−
Cho i và tính M=2
i
-1 bằng hàm Mersenne_SL();
in M
−
Phân tích M bằng hàm Phân_tich_Word
(a) đọc một số nguyên tố a từ tệp các số nguyên tố nhỏ
(b) Nếu M không chia hết cho a thì quay lên bước a) để đọc
số tiếp theo. Thực hiện phép chia M cho a bằng hàm
Chia_Word()
-
Nếu M chia hết cho a thì làm lại bước này đối
với thương của phép chia M cho a.
-
Nếu đến một lúc nào đó ta thu được một thương
bằng một số nguyên tố trong tệp hoặc chia hết
cho một số trong tệp thì dừng chương trình và
kết luận đã phân tích hoàn toàn và tích của các
thừa số nguyên tố là ước của M chính là bằng
M.
-
Nếu đọc hết tệp mà thương cuối cùng không
trùng với bất kỳ số nào trong tệp hoặc không
chia hết cho bất cứ số nào trong tệp nào thì phải
phân tích xem thương này có phải là số nguyên
tố không bằng cách dùng hàm nguyên_to_SL.
Nếu xác định thương này là nguyên tố thì dừng
chương trình và kết luận là “ phân tích hoàn
toàn”. Ngược lại thì chuyển sang giai đoạn (2).
(2) Dùng thuật toán Pollard_1 để phân tích ước hợp số
Z của M
-
Lấy ngẫu nhiên một số lớn a=Random_SL(Z); khởi đầu
lấy Q=2;
-
Dùng hàm UCLN_SL để tìm ước chung lớn nhất của Z và
a
Q
-1.
Nếu UCLN này lớn hơn 1 thì đây sẽ là một ước của Z và
in ra “đã tìm được ước”. Ngược lại thì tăng Q lên 1 và
làm lại bước này cho đến khi tìm được một ước hoặc khi
Q vượt qua một số Q
0
đủ lớn nào đó thì dừng (thông
thường, chọn Q
0
=65536). Trong trường hợp này ta nói
rằng
“không phân tích hoàn toàn” .
Sơ đồ khối của các modules trong chương trình
a) Chương trình chính
Begin
Input i
Tính
M=2
n
-1
Tìm ước nhỏ < 2
16
Ước còn lại
là nguyên tố
Phân tích hoàn
toàn
Pollard1
=0
Ước nguyên tố
Ước còn lại
Không phân
tích hoàn toàn
T
T
F
F
b) Pollard_1
Input Z là hợp số
i=2
X=random(Z)
X=X
i
mod Z
gdc(X-1, Z)=P
P>1
Pollard=1
P và Z=Z/P
là 2 ước của Z
i=i+1
i<I0
Pollard=0
Không phân tích
được
F
T
F
T
Kết luận
•
Bài toán phân tích số nguyên ra thừa số nguyên tố đã được đặt ra
từ rất lâu và là một bài toán phức tạp.
•
Kết quả chính của đề tài là xây dựng được một chương trình có thể
phân tích được tất cả các số nguyên có dạng 2
n
-1, với n<=200, ra
các thừa số nguyên tố dựa trên thuật toán Pollard thứ nhất.