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

Tài liệu Kỹ thuật lập trình - Chương 4: Phân tích số nguyên thành nhân tử

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 (174.7 KB, 13 trang )

Chương 4

PHÂN TÍCH SỐ NGUYÊN THÀNH NHÂN TỬ
4.1 Nhân tử hóa với độ phức tạp là hàm mũ

4.1.1 Mở đầu
Trong mục này chúng ta xem xét các thuật toán phân tích số tự nhiên n ra thừa số, mà
nó thực hiện O(n c ) lệnh số học, c là hằng số, 01

2

học với một số giá trị c1 ,c2 . Chúng ta sẽ giới hạn bằng cách tìm kiếm sự phân tích số ra 2
thừa số: n=ab, 1 < a ≤ b < n . Nếu như thuật toán tìm kiếm như vậy mất O( f (n)) lệnh số
học, thì sự phân tích hồn tồn n ra thừa số nguyên tố sẽ được tìm thấy tốn O( f (n) log n)
lệnh số học, bởi vì n bao gồm tích của không lớn hơn log 2 n số nguyên tố.
Nhưng trước khi tiến hành phân tích thành nhân tử số nguyên, chúng ta phải chắc
chắn rằng số đã cho là hợp số. Để tin tưởng điều này, tốt nhất chúng ta dùng một trong
các phương pháp kiểm tra tính nguyên tố của số bằng một số phương pháp đã trình bày
trong chương về số nguyên tố, nhưng thông thường ta chọn phương pháp xác suất, ví dụ
thuật tốn Miller-Rabin.
4.1.2 Phương pháp Fermat
Phương pháp nhân tử hóa chúng ta đã tìm hiểu trong phần phương pháp thử chia, và
cách này tốn O(n1 / 2 ) lệnh số học. Bây giờ chúng đi tìm hiểu thuật tốn Fermat. Thuật tốn
này tính tốn nhân tử lớn nhất a của n, mà nó khơng lớn hơn n1 / 2 . Trong thuật tốn này
khơng sử dụng lệnh chia mà là lệnh cộng, trừ và nhân. Chú ý rằng nếu n=pq, với p, q là
số ngun tố, ví dụ nó có độ lớn như nhau thì thuật tốn Fermat sẽ nhanh phân tích. Cái
này được tính tốn khi chọn modulo trong hệ mã RSA.
Thuật tốn Fermat
Cho n là hợp số, n=ab, ở đây 1 < a ≤ b . Đặt a = u − v, b = u + v , với u, v là số tự nhiên,
u=



a+b
b−a
,v =
, n = ab = u 2 − v 2 . Thuật tốn Fermat tìm sự biểu diễn n dưới dạng
2
2

n = u 2 − v 2 , từ đây nhận được sự phân tích n = (u − v )(u + v) = ab .

Chúng ta làm việc với các độ lớn
rk = xk2 − y k2 − n , k=0,1,2,…


[ ]

Giá trị ban đầu ( x0 , y0 ) = ( n ,0) . Sự tăng số k diễn ra theo quy tắc sau. Nếu như
rk = 0 , thì mục đích của chúng ta đạt được n = xk2 − y k2 = ( xk − y k )( xk + y k ) , và thuật toán

dừng. Nếu như rk > 0 , thì
( xk +1 , y k +1 ) := ( xk , y k + 1) ,

Nếu như rk < 0 , thì
( xk +1 , y k +1 ) := ( xk + 1, y k ) ;
2
2
sau đó rk +1 := xk +1 − y k +1 − n

Chúng ta có thể chứng minh rằng với số bước thực hiện có hạn thì thuật tốn đưa đến
giá trị rk = 0 .

4.1.3 Phương pháp (p-1) Pollaid
Thuật toán p-1 của Pollaid đưa ra năm 1974 là một thuật toán đơn giản áp dụng đối
với các số nguyên lớn. Thuật toán này dựa vào hai đối số: Số nguyên lẻ n cần phân tích
và cận B.
Thuật toán được miêu tả như sau:
Đầu vào: n và B.
Đầu ra: Các thừa số của n (nếu tìm thấy).
Bước 1. Cho a=2
Bước 2. For j=2 to B do
a = a j (mod n)

Bước 3. Tính d=UCLN(a-1,n)
Bước 4. Nếu 1 < d < n thì
d là một thừa số của n
Ngược lại
Khơng tìm thấy thừa số của n.
Chúng ta xem tính hợp lý của thuật tốn.
Giả sử p là một ước số nguyên tố của n. Giới hạn B >0 thỏa mãn điều kiện sau. Với
mọi số nguyên tố q | ( p − 1) thì ta có điều kiện:
q

v q ( p −1)

≤B.

Từ đây dẫn đến (p-1)|B! Nếu như chúng ta chọn số tự nhiên n sao cho UCLN(a,n)=1
thì theo định lý nhỏ Fermat:


a B! ≡ 1(mod p ) ,


Mà (p-1)|B!, nên a ≡ 1(mod p ) , nghĩa là p | (a − 1) , mà ta lại có p|n, cho nên
p=UCLN(a-1, n).
Trong thuật tốn có (B-1) lũy thừa theo modulo, mỗi lũy thừa cần nhiều nhất là
2log2B phép nhân modulo, ở đây chúng ta có thể áp dụng thuật tốn bình phương và nhân
để thực hiện hiểu quả phép lũy thừa.
Việc tính ước chung lớn nhất có thể thực hiện trong thời gian O((log n) 3) bằng thuật
tốn Euclide. Vì thế độ phức tạp của thuật toán là O(B log B(log n) 2+(log n)3). Nếu như B
là O((log n)i) với i là một số ngun nào đó thì độ phức tạp của thuật toán là độ phức tạp
thời gian đa thức.
4.1.4

Phương pháp ρ Pollaid

Phương pháp này được đề cập khá nhiều trong các sách và báo, nên ở đây chúng ta
chỉ nói khá tóm tắt miêu tả thuật tốn.
Sơ đồ thuật toán
Đầu vào: là số nguyên n, mà chúng ta cần phân tích nó ra thừa số.
Bước 1. Chọn ánh xạ
f : Zn → Zn .

Thông thường f (x) là đa thức có bậc khơng lớn hơn hay bằng 2, ví dụ f ( x) = x 2 + 1 .
Bước 2. Chọn ngẫu nhiên x0 ∈ Z n và tính phần tử theo đệ quy của dãy x0 , x1 , x 2 ,... theo
quy tắc
xi ≡ f ( xi −1 )(mod n) .

Bước 3. Đối với một số j, k kiểm tra điều kiện
1 < UCLN ( x j − xk , n) < n

Cho đến khi nào không tìm được ước của số n hoặc thời gian chưa kết thúc.

Kết thúc thuật toán
Chú ý: Sự lựa chọn j, k trong bước 3 của thuật tốn thơng thường thực hiện một trong
các cách sau
1. Đối với từng j chọn tất cả các số k, ktính.
2. Xem cặp k và 2k, để kiểm tra điều kiện
1 < UCLN ( x2 k − xk , n) < n


h
h +1
3. Nếu như j trong giới hạn 2 ≤ j < 2 , h ∈ N , thì cho k = 2 h − 1

Đây là phương pháp khá đơn giản. Nếu như chu kỳ của dãy xi (mod n) có thể bậc là
n, thì chu kỳ của dãy xi (mod p ) đối với ước nguyên tố p của số n khơng vượt q p.
Điều này có nghĩa là x j , xk có thể khác nhau theo modulo n, nhưng trùng nhau theo
modulo p, có nghĩa là p | UCLN ( x j − xk , n) .
Phương pháp này cần O( n1 / 4 ) lệnh số học. Nó rất thơng dụng và thường được sử dụng
để tách ước nguyên tố không lớn của số n.
4.1.5 Phương pháp Serman-Leman
Thuật toán này cần O( n1 / 3 ) lệnh số học
Thuật toán
Đầu vào: Cho n là số lẻ, n>8.
Đầu ra: Là các thừa số của n.
Bước 1. Đối với a = 2,3,..., [ n1 / 3 ] kiểm tra điều kiện a | n . Nếu như trên bước này chúng
ta khơng phân tích được n ra thừa số, thì chuyển đến bước 2.
Bước 2. Nếu như trong bước 1 ước khơng tìm thấy và n là hợp số, thì n=pq, ở đây p,q
là số nguyên tố và
n1 / 3 < p ≤ q < n 2 / 3


[

[

]

Như thế đối với tất cả k = 1,2,..., [ n1 / 3 ] và tất cả d = 0,1,..., n1 / 6 /(4 k ) + 1 , kiểm tra số

]

( 4kn + d ) 2 − 4kn có phải là số chính phương hay là khơng. Nếu là chính phương thì
A=

[

]

4kn + d và B =

A2 − 4kn thỏa mãn đồng dư thức
A2 ≡ B 2 (mod n) .

Trong trường hợp này kiểm tra điều kiện
1 < UCLN ( A ± B, n) < n

Nếu điều kiện này thỏa mãn thì chúng ta đã phân tích n ra 2 thừa số và thuật toán
dừng.
Kết thúc thuật toán.
Nếu thuật tốn khơng phân tích n ra 2 thừa số thì n là số ngun tố.
4.1.6 Thuật tốn Pollaid –Xtrassen

Thuật tốn này phân tích n thành 2 thừa số cần O(n1 / 4 log 4 n) lệnh số học. Thuật toán
cơ bản dựa trên định lý sau


Định lý 4.1 Cho z ∈ N , y = z 2 . Khi đó đối với bất kỳ số tự nhiên t, ước số nhỏ nhất của
số UCLN (t , y!) có thể tìm thấy cần O( z log 2 z log 2 t ) lệnh số học.
Thuật toán Pollard-Xtrassen
Đặt z = [ n1 / 4 ] + 1, y = z 2 > n1 / 2 , t = n . Tiếp theo với sự giúp đỡ của định lý 2.20 chúng ta
tìm ước nguyên tố nhỏ nhất của UCLN (n, y!) . Bởi vì y! chia hết cho ước nguyên tố nhỏ
nhất p của n (bởi vì p ≤ n1 / 2 < y ), nên thuật tốn đưa ra chính là số p. Độ phức tạp của
thuật toán Pollard-Xtrassen là O( z log 2 z log 2 t ) = O(n1 / 4 log 4 n) .
4.1.7 Phương pháp nhân tử hóa dành cho các số có dạng đặc trưng
Đối với số n có dạng đặc trưng thì có khả năng có các cách riêng để phân tích ra thừa
số ngun tử, bởi vì ước của các số đó có thể có dạng đặc trưng.
Định lý 4.2 Cho b, k ∈ N , b > 1, n = b k − 1 . Nếu p là số nguyên tố, và ước của n, thì một
trong hai điều khẳng định sau là đúng:
1. p | b d − 1 với một số giá trị của d, d < k , d | k ;
2. p ≡ 1(mod k ) .
Nếu như p>2 và k là số lẻ, thì trường hợp thứ hai p ≡ 1(mod 2k ) .
Chứng minh: Theo định lý nhỏ Fermat thì b p −1 ≡ 1(mod p) , cũng như b k ≡ 1(mod p) .
Giả sử d = UCLN (k , p − 1) , khi đó b d ≡ 1(mod p ) . Nếu như d < k , thì có nghĩa là điều
khẳng định thứ nhất đúng. Còn nếu như d=k, thì k|p-1, có nghĩa là p ≡ 1(mod k ) .
4.2 Phân tích số nguyên thành nhân tử với độ phức tạp là hàm mũ giả
4.2.1 Mở đầu
Ký hiệu Ln [γ ; c] là hàm có đặc điểm sau: Lx [ γ ; c ] = e( c + o (1))(log x )

γ

(log log x )1−γ


, o(1) → 0 , khi

x → +∞ , c, γ là hằng số.

Trong chương này chúng ta xem các thuật toán nhân tử hóa số tự nhiên n, cần Ln [ γ ; c]
lệnh số học khi γ =

1
1
hoặc γ = và một số giá trị dương c, gía trị này phụ thuộc vào
2
3

thuật toán.
Chúng ta giả sử rằng, n là hợp số và n không chia hết cho các số nguyên tố nhỏ
(những số nguyên tố nhỏ chúng ta tìm bằng cách lựa chọn, hoặc với sự giúp đở của các
thuật toán mà chúng ta tìm hiểu trong chương trước).


Thuật tốn được miêu tả như sau, cách tìm các số tự nhiên x,y, sao cho x 2 ≡ y 2 (mod n) ,
sau đó kiểm tra điều kiện
1 < UCLN ( x ± y , n) < n .

Nếu như ước của n được tìm , thì thuật tốn dừng, ngược lại ta đi xây dựng cặp x,y
tiếp theo.
Định lý 4.3 Cho n là hợp số lẻ, và giá trị của nó khơng bằng giá trị của hàm mũ của
một số nguyên tố. Khi đó đối với cặp ngẫu nhiên x, y,1 ≤ x, y ≤ n − 1 , thỏa mãn các biểu
thức
UCLN ( x, n) = UCLN ( y , n) = 1
x 2 ≡ y 2 (mod n)


Xác suất để
1 < UCLN ( x ± y , n) < n

Sẽ không nhỏ hơn 1/2.
α
α
Chứng minh. Giả sử n = p1 ... pk , k ≥ 2 . Cặp số x,y thỏa mãn điều kiện của định lý,
1

k

tương ứng với số z, 1 ≤ z ≤ n − 1, z 2 ≡ 1(mod n) (rõ ràng z = xy −1 (mod n)) . Chúng ta cần
chứng minh rằng xác suất để z thỏa mãn bất đẳng thức phụ
1 < UCLN ( z ± 1, n) < n

Không nhỏ hơn 1/2. Rõ ràng rằng điều kiện z 2 ≡ 1(mod n) tương đương với hệ phương
trình sau
z ≡ ±1(mod p1α 1 ),
..........................
z ≡ ±1(mod pkα k )

Từ đây, số lượng các giá trị có thể của z bằng 2 k , và chỉ đối với 2 giá trị z ≡ ±1(mod n)
thì ước chung lớn nhất UCLN ( z ± 1, n) bằng 1 hay n. Bởi vì k ≥ 2 , nên định lý của chúng ta
rõ ràng đúng.
4.2.2 Phương pháp Dixon
Cho

n∈ N -




số



chúng

ta

cần

phân

tích

thành

nhân

tử,

L = L(n) = exp((log n log log n)1 / 2 ) . Giả sử a là hằng số nào đó, 0 < a < 1 , giá trị của nó xác

định ở dưới. Chúng ta gọi tập các số nguyên tố p, nằm trong khoảng dưới là cơ sở nhân
tử
2 ≤ p ≤ La .


a

Giả sử k là số lượng các số nguyên tố trong cơ sở nguyên tử, 2 = p1 < p 2 < ... < pk ≤ L .

Thuật toán Dixon.
Đâu vào: là số nguyên n cần kiểm tra
Bước 1. Chúng ta tìm các số m1 ,..., mk +1 bằng cách lựa chọn ngẫu nhiên, sao cho thỏa
mãn
1 < mi < n
α

α

Q(mi ) = p1 i ,1 ... pk i ,k
mi2 ≡ Q(mi )(mod n)
pi

Và các giá trị

được dùng là chẳn lần, và với i = 1,..., k + 1 . Ký hiệu

v = (α i ,1 ,..., α i , k ∈ Z k .

Bước 2. Giải hệ phương trình tuyến tính
x1 v1 + ... + xk +1 v k +1 ≡ 0(mod 2)

Trong không gian vector Z 2 k , chúng ta tìm được tập x1 ,..., xk +1 ∈ { 0,1} , tập này không
bao gồm các giá trị 0 (cái này tồn tại bởi vì số lượng phương trình k nhỏ hơn số ẩn).
Bước 3. Để tìm được x1 ,..., xk +1 , rõ ràng ta có biểu thức sau
k +1

∑ x i α i ,1


(m1x1 ...mkx+k +11 ) 2 ≡ p1i=1

Ký hiệu X = m ...m
x1
1

x k +1
k +1

k

k +1

(

,Y = ∏ p j

∑ x iα i , j ) / 2
i =1

j =1

k +1

∑ xi α i ,k

... pki=1

(mod n)


 k +1



 i =1



, (số  ∑ xiα i , j  / 2 -là số nguyên xác định theo

xi ), chúng ta nhận được biểu thức tương ứng
X 2 ≡ Y 2 (mod n) .

Tiếp theo chúng ta kiểm tra điều kiện
1 < UCLN ( X ± Y , n) < n

Trong trường hợp thành cơng chúng ta đã phân tích n ra thừa số. Trong trường hợp
khơng thành cơng thì chúng ta quay lại bước 1 và tìm các giá trị khác của mi
Kết thúc thuật tốn
Ví dụ. Giả sử n=15770708441. Cơ sở nhân tử là tập

{ 2,3,5,7,11,13} . Chọn

m1 = 8340934156 , m2 = 12044942944 , m3 = 2773700011 . Xét ba đồng dư thức sau
83409341562 ≡ 3.7(mod n)
120449429442 ≡ 2.7.13(mod n)


27737000112 ≡ 2.3.13(mod n)


Lấy tích 3 đồng dư thức trên vế theo vế, ta được
(8340934156.12044942944.2773700011) 2 ≡ (2.3.7.13) 2 (mod n) , rút gọn các biểu thức

trong ngoặc theo modulo n, ta có:
95034357852 ≡ 546 2 (mod n)

Ta tìm UCLN (9503435785 − 546, n) = 115759
Ta thấy 115759 là một ước của n.
4.2.3 Thuật toán sàng bậc hai
Trong thuật toán Dixon, vấn đề là làm thế nào để chọn các số mi mà các giá trị
mi2 (mod n) có thể phân tích hồn tồn trên cơ sở nhân tử. Năm 1981 Pomerance đề xuất

phương pháp để xác định các số mi , có tên là sàng bậc hai.
1 

Độ phức tạp của thuật toán sàng bậc hai tốn Ln  ;1 lệnh số học.
2 
Chúng ta mô tả sơ đồ thuật toán ban đầu sàng bậc hai. Chúng ta xây dựng biểu thức
X 2 ≡ Y 2 (mod n) và kiểm tra bất đẳng thức
1 < UCLN ( X ± Y , n) < n

Để làm điều này chúng ta xem đa thức
Q( x) = ( x +

ở đây H ( x) = x +

[ n ])

2


− n ≡ H ( x) 2 (mod n) ,

[ n ] . Các giá trị Q(x) trong các điểm nguyên, rõ ràng chúng là chính

phương theo modulo n. Trong cơ sở nhân tử S chúng ta xem p0 = −1 và tất cả các số
n

nguyên tố pi , pi ≤ B , sao cho   = 1 . Sau đó với sự giúp đở của một số sàng, chúng ta
 pi 
tìm giá trị xi , mà
Ai = Q( xi ) = ∏ p
p∈S

α ip

,

có nghĩa là Q( xi ) phân tích trong cơ sở nhân tử của chúng ta. Như vậy, ký hiệu Bi = H ( xi )
2
, chúng ta nhận được đồng dư thức Bi ≡ Ai (mod n) , chúng ta tích lũy số lượng đủ lớn các

biểu thức như thế, chúng ta thực hiện loại bỏ các biến và xay dựng biểu thức
X 2 ≡ Y 2 (mod n)


n

Chú ý: Điều kiện   = 1 với p là số nguyên tố của cơ sở nhân tử lấy từ đồng dư thức
p



(x +

[ n ])

2



≡ n(mod p) , mà đồng dư cần thỏa mãn đối với một số giá trị của x ∈ Z .

Sàng. Giá trị xi ∈ Z đối với Q( xi ) được xác định như sau.
1.

Đối với từng số nguyên tố p từ cơ sở nhân tử, chúng ta tìm nghiệm r1( p ) và r2( p )
của phương trình Q( x) ≡ 0(mod p) .

2.

Sau đó chúng ta thay đổi x trong khoảng đủ lớn [ − M ; M ], M ∈ N , chúng ta đưa
đến một ma trận A, mà nó được đánh số thứ tự bằng giá trị của x.

3.

Trong mỗi phần tử của ma trận với số thứ tự x ta đặt giá trị log Q( x) . Nghĩa là
A[ x ] = log | Q( x) | .

4.


Sau đó đối với từng giá trị p từ cơ sở nhân tử S chúng ta thực hiện quá trình
sàng như sau: Từ mổi phần tử của ma trận A, tức là A[ x] , số thứ tự của nó nằm
trong cấp số cộng x ≡ r1( p ) (mod p ) và x ≡ r2( p ) (mod p ) , chúng ta tính tốn giá trị
của log p .

Ý ở đây là việc tính tốn nằm ở chổ, đối với phần tử x trong cấp số như vậy, giá trị
của Q(x) sẽ chia hết cho p, nhưng việc chia Q(x) cho p chúng ta đổi thành
log Q( x) − log p . Sau khi kết thúc quá trình sàng trong phần tử của ma trận với số thứ tự x

sẽ chứa giá trị
log Q( x) −

∑ log p .

p∈S , p |Q ( x )

Sau khi kết thúc quá trình sàng, chúng ta chọn số thứ tự x, mà ở đó giá trị của ma trận
cố độ lớn khơng q lớn. Đối với các vị trí x như vậy giá trị Q(x) phân tích nhanh hơn
trong cơ sở nhân tử của chúng ta và chúng ta phân tích số Q(x) bằng ước số thử và lưu
giá trị x, để Ai = Q( xi ) hồn tồn phân tích trong cơ sở nhân tử của chúng ta.
Ý nghĩa của quá trình sàng là tiết kiệm được số lượng lệnh chia các số nguyên lớn.
Cùng với nó là để từng giá trị x ∈ [ − M ; M ] phân tích Q(x) trong cơ sở nhân tử một cách
nhanh chóng, chúng ta ước lượt được tập x, và thực hiện tính tốn bằng lệnh đơn giản là
cộng và trừ. Việc tiết kiệm này là rất hiệu quả, và nó đã được ưu chuộng hơn các thuật
tốn nhân tử hóa trước đây.
4.2.4 Phân tích ra nhân tử với sự hổ trợ của đường cong Elliptic


Thuật tốn phân tích này được Lenstra đề xuất, và độ phức tạp của nó là cần
1/ 2


e (( 2 + o (1)) log p log log p ) log 2 n lệnh số học, p là ước nguyên tố nhỏ nhất của n.

Để miêu tả thuật toán Lenstra chúng ta cần đường cong Elliptic không xây dựng trên
trường mà là vành Z n , ở đây n là số lẻ, và không chia hết cho 3 hợp số, n là số chúng ta
3
cần phân tích thành nhân tử. Chúng ta xem 3 số ( x, y, z ) ∈ Z n , sao cho iđêal sinh bởi x,y

và z trùng với vành Z n . Tập hợp

{(ux, uy, uz) | u ∈ Z

*
n

3

}

, ( x, y , z ) ∈ Z n ,

3
gọi là qũy đạo của phần tử ( x, y, z ) ∈ Z n , nó đươc ký hiệu là (x:y:z). Tập tất cả các qũy

đạo này ký hiệu P 2 ( Z n ) .
Đường cong Elliptic E = Ea ,b trong vành Z n cho bởi phương trình sau
y 2 = x 3 + ax + b ,
*
ở đây a, b ∈ Z n ,6(4a 3 + 27b 2 ) ∈ Z n . Chúng ta ký hiệu tập các điểm của đường Elliptic


thông qua

{

}

E = Ea ,b ( Z n ) = ( x : y : z ) ∈ P 2 ( Z n ) | y 2 z = x 3 + axz 2 + bz 3 .

Tập hợp này là một nhóm Abel hữu hạn, ứng với phép cộng. Thế nhưng chúng ta sẽ
sử dụng lệnh nhóm như vậy đối với trường hữu hạn nguyên tố. Chúng ta ký hiệu
O = (0 : 1 : 0) ∈ P 2 ( Z n ),

Vn = { ( x : y : 1) | x, y ∈ Z n } ∪ { O}

Đối với P ∈ Vn và đối với bất kỳ số nguyên tố p, là ước của n, một điểm P từ tập
P 2 ( Z p ) ký hiệu là Pp . Rõ ràng rằng Pp = O p khi và chỉ khi P=O.

Phép cộng 2 điểm P, Q ∈ Vn được tính như sau. Khi tính P+Q chúng ta hoặc tìm d là
ước của n (và mục đích của chúng ta đạt được) hoặc tìm điểm R ∈ Vn mà nó thỏa mãn điều
kiện sau.
Nếu như p | n, a ≡ a (mod p ) , và nếu như đối với p tìm được b ∈ Z p sao cho,
3
2
6(4a + 27b ) ≠ 0 trong Z p và khi đó Pp , Q p ∈ Ea ,b ( Z p ) , thì R p = Pp + Q p trong Ea ,b ( Z p ) .

Việc tính tổng này được thực hiện như trong cách xây dựng trường hữu hạn bằng đường
cong Elliptic.


Chú ý: Nếu như chúng ta có điểm P = ( x : y : 1) , số nguyên tố p và a thì

y 2 ≡ x 3 + ax + b(mod n) . Từ đây chúng ta có b ≡ y 2 − x 3 − ax(mod n) . Thế thì xác định được

giá trị b ≡ b(mod p ) . Nếu như đối với từng p|n, điểm Q p nằm trên đường cong
y 2 ≡ x 3 + ax + b(mod p ) trong trường Z p , thì chúng ta có thể cộng Pp , Q p trên đường cong

trong trường Z p và tính tổng P+Q trong trường Z n . Nếu như đối với một số giá trị của p
mà điểm Q p không nằm trên đường y 2 ≡ x 3 + ax + b(mod p ) , thì tính tổng P và Q không
được thực hiện.
Tổng các điểm P và Q từ tập Vn được thực hiện như sau. Nếu như P=O, thì R=Q; Nếu
như Q=O thì R=P. Giả sử

P, Q ≠ O, P = ( x1 : y1: 1), Q = ( x 2 : y2 : 1) . Chúng ta tìm

d = UCLN ( x1 − x2 , n) bằng thuật toán Euclid. Nếu như 1 < d < n , thì chúng ta đã tìm được

ước của n, và thuật tốn dừng. Nếu như d=1 thì x1 ≠ x2 (mod n) và x1 ≠ x2 (mod p ) đối với số
nguyên tố bất kỳ p, p|n. Khi đó chúng ta tìm ( x1 − x2 ) −1 (mod n) bằng thuật toán mở rộng
Euclid. Tiếp theo ta đặt
λ = ( y1 − y2 )( x1 − x2 ) −1 (mod n) ,

v = y1 − λx1 (mod n) , x3 = − x1 − x2 + λ2 (mod n) ,

y3 = −λx3 − v(mod n) .

Khi đó theo định nghĩa tổng của P và Q bằng R = P + Q = ( x3 : y3 : 1) .
Bây giờ chúng ta xem trường hợp d = UCLN ( x1 − x2 , n) = n . Lúc này x1 ≡ x2 (mod n) .
Chúng ta tìm d1 = UCLN ( y1 + y2 , n) . Nếu như 1 < d1 < n thì chúng ta đã tìm được ước của n
và thuật toán dừng. Nếu như d1 = n ,nghĩa là y1 ≡ − y2 (mod n) , thì tổng R = P + Q = O . Nếu
như d=1, chúng ta tìm
λ1 = (3 x12 + a )( y1 + y2 ) −1 (mod n) , v = y1 − λx1 (mod n) ,

x3 = −2 x1 + λ2 (mod n) , y3 = −λx3 − v(mod n)

và giả định R = P + Q = ( x3 : y3 : 1) .
Như vậy chúng ta đã xác định được tổng của các điểm của Vn . Bây giờ chúng ta xác
định tích của điểm P ∈ Vn với số tự nhiên k. Kết quả phép nhân này hoặc là chúng ta tìm
được ước d của n, 1Nếu như p là số nguyên tố, p|n, a ≡ a (mod p) , và nếu như đối với p tìm được b ∈ Z p
3
2
sao cho 6(4a + 27b ) ≠ 0(mod p ) , và trong khi đó Pp ∈ Ea ,b ( Z p ) , thì khi đó R p = kPp trong


nhóm Ea ,b ( Z p ) , ở đây thuật tốn tìm kPp được nói đến trương chương xây dựng trường
hữu hạn bằng đường cong Elliptic.
Thuật toán nhân tử hóa với một đường cong Elliptic
Đầu vào của thuật tốn là số tự nhiên n và các tham số v, w ∈ N ,phụ thuộc vào n.
Cũng như a, x, y ∈ Z n , sao cho P = ( x : y : 1) ∈ Vn , đối với b ≡ y 2 − x3 − ax(mod n) thỏa
*
mãn điều kiện 6(4a 3 + 27b 2 ) ∈ Z n . Thuật tốn tìm kiếm ước số tự nhiên d của số n,

1Đối với từng số r ∈ N ,2 ≤ r ≤ w , chúng ta gỉa sử

{

}

e(r ) = max m | m ∈ Z ≥ 0 , r m ≤ v + 2 v + 1 ,

và sau đó

k=

∏r

2≤ r ≤ w

e(r )

, r là số nguyên tố.

Giả sử P = ( x : y : 1) ∈ Vn . Khi đó P nằm trên đường cong Elliptic Ea ,b trong vành Z n ,
được xác định bởi phương trình Y 2 = X 3 + aX + b . Chúng ta tính điểm kP. Nếu như
trong q trình tính tốn tìm được ước của số n, 1ra thừa số và thuật tốn dừng. Nếu như tìm được kP và khơng tìm được d thì thuật
tốn dừng và thơng báo về bất thành cơng của thí nghiệm nhân tử hóa.
Thuật tốn kết thúc.
Chú ý.
Chúng ta chọn các tham số v,w,a,x,y như thế nào? Các phần tử a, x, y ∈ Z n được chọn
ngẫu nhiên; khi đó b ≡ y 2 − x3 − ax(mod n) , chúng ta nhận được đường cong Elliptic Ea ,b
trong vành Z n và các điểm trên nó. Tham số w theo lý thuyết bằng w = L( p)

1
2

+ o (1)

, với

L(t ) = exp log t log log t , p là ước nguyên tố nhỏ nhất của n. Bởi vì p là chưa biết, nhưng
 1



1/ 2
+ o(1)  log n log log n  , từ đây chúng ta nhận được
p ≤ n1 / 2 , nên L( p ) ≤ L(n ) = exp 

 2


giới hạn trên của của w
1

w ≤ L( n) 2

+ o (1)

.

Trên thực tế thuật tốn phân tích thành nhân tử khi cho bởi n,v,w thực hiện như sau.
Chọn ngẫu nhiên các số ưu tiên a, x, y ∈ Z n và thực hiện thuật tốn nhân tử hóa với một


đường cong. Và lặp lại như thế cho đến khi nào phân tích được n ra thừa số hoặc thời
gian của chúng ta kết thúc.
4.2.5 Thuật toán sàng trường số học
Thuật tốn sàng trường số dành phân tích một số nguyên dạng đặc biệt ra thừa số
(SNFS). Số n, mà chúng ta áp dụng SNFS có dạng n = r e − s , ở đây r ∈ N , s ∈ Z , r và |s|
không quá lớn.
Độ phức tạp của thuật toán này là Ln [1 / 3; c ] c là hằng số nào đó. Thực tế sàng trường
số khơng là thuật tốn, mà là một phương pháp tính tốn, nó bao gồm một số tầng, một

trong các tầng nó được phục vụ bằng một số thuật toán.
Sơ đồ phương pháp SNFS đối với số n
Tầng 1.Lựa chọn cơ sở nhân tử
Cơ sở nhân tử bao gồm từ một số tập hợp các phần tử a p ∈ Z n , a p ≠ 0 . Tất cả a p khả
nghịch trong vành Z n . Ký hiệu Z P tập hợp vector | P0 | -chiều:
0

{

Z P0 = (v p ) p∈P0 | v p ∈ Z

}

Chúng ta xem ánh xạ
*
f : Z P0 → Z n (nhóm khả nghịch theo phép nhân các phần tử trong vành Z n )

f ((v p ) p∈P0 ) =

∏a
p∈P0

vp
p

(mod n) .

Tầng 2. Tìm mối liên hệ
Ở đây chúng ta tìm vector v ∈ Kerf , tức là v = (v p ) p∈P , sao cho
0


∏a

vp
p

≡ 1(mod n)

p∈P0

Chúng ta cần tìm tập hợp đủ lớn V = { v ∈ Kerf } các vector như thế, chính xác hơn |V|
cần phải lớn hơn | P0 | .
Tầng 3. Tìm sự phụ thuộc
Ở đây chúng ta tìm sự phụ thuộc tuyến tính khơng tầm thường theo modulo 2 của các
vector tìm được v ∈ V ; số lượng của nó lơn hơn so với kích thước của nó, cho nên sự
phụ thuộc như vậy là tồn tại. Để tìm sự phụ thuộc chúng ta giải hệ phương trình tuyến
tính

∑z v
j

j

j

≡ 0(mod 2)


ở đây V = {v j } . Giải hệ phương trình này chúng ta tìm được tập hợp con không rổng
W


⊆ V , mà

∑ v = 0(mod 2)

v∈W

Lúc này w =

1
∑ v , với 2w ∈ Kerf . Điều này có nghĩa là khi X ≡ f (W )(mod n) thì
2 v∈W

chúng ta có
X 2 ≡ f (2W ) ≡ 1(mod n) .

Lúc này chúng ta kiểm tra bất đẳng thức sau có đúng hay khơng
1 < UCLN ( X ± 1, n) < n

Nếu như bất đẳng thức đúng thì chúng ta tìm được ước của n, và chúng ta dừng,
ngược lại chúng ta quay về hoặc tầng 2 (tìm liên hệ mới), hoặc tầng 1 (xây dựng một
cơ sở nhân tử mới)
Kết thúc sơ đồ



×