1. Trang chủ
  2. » Công Nghệ Thông Tin

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ử

13 8 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 623 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Phân tích nhân tử là một thuật ngữ toán học dùng để chỉ một cách viết một số nguyên, hay tổng quát là một vật thể toán học, thành một phép nhân của các số nguyên khác, hay tổng quát là các vật thể toán học khác. Các số nguyên, hay vật thể toán học, nằm trong phép nhân gọi là nhân tử. Cùng tham khảo tài liệu dưới đây để tìm hiểu kiến thức về phân tích số nguyên thành nhân tử.

Trang 1

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ố, 0<c<1; hoặc thực hiện O(n c1logc2 n)

lệnh số 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 abn 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 hoàn toàn n ra thừa số nguyên tố sẽ được tìm thấy tốn O(f(n) logn)

lệnh số học, bởi vì n bao gồm tích của không lớn hơn log2n 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 toá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 toán Fermat Thuật toán này tính toá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 toá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ố nguyên tố, ví dụ nó có độ lớn như nhau thì thuật toán Fermat sẽ nhanh phân tích Cái này được tính toán khi chọn modulo trong hệ mã RSA

Thuật toán Fermat

Cho n là hợp số, n=ab, ở đây 1 a  b Đặt auv,buv, với u, v là số tự nhiên,

2

,

2

a b v

b

a

u    , nabu2  v2 Thuật toán Fermat tìm sự biểu diễn n dưới dạng

2

u

n  , từ đây nhận được sự phân tích n (uv)(uv) ab

Chúng ta làm việc với các độ lớn

n y x

r kk2 k2 , k=0,1,2,…

Trang 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ư 0

k

r , thì mục đích của chúng ta đạt được 2 2 ( )( )

k k k k k

x

n     , và thuật toán dừng Nếu như r k  0, thì

) 1 , ( : ) , (x k1 y k1  x k y k  , Nếu như r k  0, thì

) , 1 ( : ) , (x k1 y k1  x ky k ; sau đó r k1: x k21 y k2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 toán đưa đến giá trị r k  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

)

(mod n

a

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 toá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:

B

q v q(p1) 

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:

) (mod 1

a B

Trang 3

Mà (p-1)|B!, nên a 1 (modp), nghĩa là p| (a 1 ), mà ta lại có p|n, cho nên p=UCLN(a-1, n)

Trong thuật toá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 toá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 toá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ố nguyên 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 toá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ạ

n

n Z Z

f :  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ụ ( ) 2 1

x x

Bước 2 Chọn ngẫu nhiên x 0 Z nvà tính phần tử theo đệ quy của dãy x0,x1,x2, theo quy tắc

) )(mod

f

x ii

Bước 3 Đối với một số j, k kiểm tra điều kiện

n n x x UCLN jk

1 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 toá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, k<j; cái này thì lâu và cần nhiều bộ nhớ máy tính

2 Xem cặp k và 2k, để kiểm tra điều kiện

n n x x UCLN kk

3 Nếu như j trong giới hạn 2 2  1

h j , h  N , thì cho k 2 h 1

Trang 4

Đây là phương pháp khá đơn giản Nếu như chu kỳ của dãy x i (mod n)có thể bậc

là n, thì chu kỳ của dãy x i (mod p)đối với ước nguyên tố p của số n không vượt quá

p Điều này có nghĩa là x , j x kcó thể khác nhau theo modulo n, nhưng trùng nhau theo modulo p, có nghĩa là p|UCLN(x jx k,n)

Phương pháp này cần ( 1 / 4 )

n

O 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à

3 / 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ố

 4knd) 4kn

 có phải là số chính phương hay là không Nếu là chính phương thì

knd

A 4  và B A2 4kn

 thỏa mãn đồng dư thức

) (mod

2 2

n B

Trong trường hợp này kiểm tra điều kiện

n n B A

1

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 toán không phân tích n ra 2 thừa số thì n là số nguyên tố

4.1.6 Thuật toán Pollaid –Xtrassen

Thuật toán này phân tích n thành 2 thừa số cần O(n1 / 4 log 4n)lệnh số học Thuật toán

cơ bản dựa trên định lý sau

Định lý 4.1 Cho zN,yz2 Khi đó đối với bất kỳ số tự nhiên t, ước số nhỏ nhất của

số UCLN ( y t, )có thể tìm thấy cần O(zlog 2zlog 2t)lệnh số học

Trang 5

Thuật toán Pollard-Xtrassen

Đặt zn1 / 4 1 ,yz2 n1 / 2 ,tn 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ì pn1/2 y), nên thuật toán đưa ra chính là số p Độ phức tạp của thuật toán Pollard-Xtrassen là O(zlog 2zlog 2t) O(n1 / 4 log 4n)

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ố nguyên tử, bởi vì ước của các số đó có thể có dạng đặc trưng

Định lý 4.2 Cho b,kN,b 1 ,nb 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, dk,d|k;

2 p 1 (modk)

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 (modp)

, cũng như b k 1 (modp)

Giả sửdUCLN(k,p 1 ), khi đó b d 1 (modp)

 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 (modk)

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 L n ;c là hàm có đặc điểm sau:    

 ( (1))(log ) (loglog )1

x c e

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

c

L n  ; lệnh số học khi  12 hoặc  13 và một số giá trị dương c, gía trị này phụ thuộc vào 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 toán được miêu tả như sau, cách tìm các số tự nhiên x,y, sao chox 2 y2 (modn) , sau đó kiểm tra điều kiện

n n y x

Nếu như ước của n được tìm , thì thuật toán dừng, ngược lại ta đi xây dựng cặp x,y tiếp theo

Trang 6

Đị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,yn 1, thỏa mãn các biểu thức

) (mod

1 ) , ( )

, (

2

x

n y UCLN n

x UCLN

Xác suất để

n n y x

1

Sẽ không nhỏ hơn 1/2

p p k

k

Cặp số x,y thỏa mãn điều kiện của định lý, tương ứng với số z, 1 zn 1 ,z2  1 (modn)(rõ ràng z xy 1 (modn))

chứng minh rằng xác suất để z thỏa mãn bất đẳng thức phụ

n n z UCLN  

1

Không nhỏ hơn 1/2 Rõ ràng rằng điều kiện z 2 1 (modn)tương đương với hệ phương trình sau

) (mod 1

), (mod

1

k

k

p z

p z

Từ đây, số lượng các giá trị có thể của z bằng 2k, và chỉ đối với 2 giá trị

) (mod

z  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 - là số mà chúng ta cần phân tích thành nhân tử,

) ) log log exp((log

)

(n n n 1 / 2

L

L  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ử

a L

p 

Giả sử k là số lượng các số nguyên tố trong cơ sở nguyên tử, a

k L p p

p    

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 , ,m k1 bằng cách lựa chọn ngẫu nhiên, sao cho thỏa mãn

Trang 7

k i i

k i

i

p p m Q

n m

, 1 ,

) (

1

1

) )(mod (

m ii

Và các giá trị p i được dùng là chẳn lần, và với i 1 , ,k 1 Ký hiệu

k k i

v ( ,1, , , 

Bước 2 Giải hệ phương trình tuyến tính

) 2 (mod 0 1 1 1

x

Trong không gian vector k

Z2 , chúng ta tìm được tập x1, ,x k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 , ,x k1, rõ ràng ta có biểu thức sau

) (mod

)

(

1 1 , 1

1 1 , 1

1

1

2 1

m

k i k i i k

i i i k

x k

x x

k

1

k

m

k j

x j

k i j i

p Y

1

2 / ) ( 1 1 ,

, (số 1 /2

1

, 

k i

j i

x -là số nguyên xác định theo x i), chúng ta nhận được biểu thức tương ứng

) (mod

2

Tiếp theo chúng ta kiểm tra điều kiện

n n Y X

1

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 m i

Kết thúc thuật toán

Ví dụ Giả sử n=15770708441 Cơ sở nhân tử là tập 2 , 3 , 5 , 7 , 11 , 13 Chọn

8340934156

1 

) (mod 7 3

8340934156 2  n

) (mod 13 7 2 4

1204494294 2  n

) (mod 13 3 2

2773700011 2  n

Lấy tích 3 đồng dư thức trên vế theo vế, ta được

) (mod ) 13 7 3 2 ( ) 2773700011

4 1204494294

8340934156

trong ngoặc theo modulo n, ta có:

) (mod 546

9503435785 2  2 n

Ta tìm UCLN( 9503435785  546 ,n)  115759

Trang 8

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ố m i mà các giá trị

)

(mod

m i có thể phân tích hoàn toàn trên cơ sở nhân tử Năm 1981 Pomerance đề xuất phương pháp để xác định các sốm i, có tên là sàng bậc hai

Độ phức tạp của thuật toán sàng bậc hai tốn  ; 1

2

1

n

L lệnh số học

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

) (mod

2

X  và kiểm tra bất đẳng thức

n n Y X

1

Để làm điều này chúng ta xem đa thức

 ) ( ) (mod ) (

) (x x n 2 n H x 2 n

ở đây H(x) x 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   1và tất cả các số

nguyên tố p i,p iB, sao cho  1



i p

n

Sau đó với sự giúp đở của một số sàng, chúng ta tìm giá trị x i, mà

S p i i

ip

p x

Q

)

có nghĩa là Q(x i)phân tích trong cơ sở nhân tử của chúng ta Như vậy, ký hiệu

)

( i

i H x

B  , chúng ta nhận được đồng dư thức B i2 A i(modn), 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

) (mod

2

X 



p

n

với p là số nguyên tố của cơ sở nhân tử lấy từ đồng dư thức

 ) (mod )

(xn 2 n 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ị x iZ đối với Q(x i)đượ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 ( )

1

p

r và ( )

2

p r

của phương trình Q(x)  0 (modp)

2 Sau đó chúng ta thay đổi x trong khoảng đủ lớn  M;M,MN , 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

Trang 9

3 Trong mỗi phần tử của ma trận với số thứ tự x ta đặt giá trị logQ(x) Nghĩa là

 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 ( )(mod )

r

r

 , chúng ta tính toán giá trị của logp

Ý ở đây là việc tính toá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

p x

Q( ) log

log  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 )

( log

x Q p S p

p 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 quá 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, để A  i Q(x i)hoàn toà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 toá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 toá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 toán phân tích này được Lenstra đề xuất, và độ phức tạp của nó là cần

n

e(( 2 o( 1 )) logplog logp)1/2 log 2 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 cần phân tích thành nhân tử Chúng ta xem 3 số (x,y,z)Z n3, sao cho iđêal sinh bởi x,y

và z trùng với vànhZ n Tập hợp

) , , ( ,

| ) , , (ux uy uz uZ n x y zZ n ,

Trang 10

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

n Z

Đường cong Elliptic EE a,b trong vành Z ncho bởi phương trình sau

b ax x

y2 3  ,

ở đây a,bZ n, 6 ( 4a3  27b2 ) Z n* Chúng ta ký hiệu tập các điểm của đường Elliptic thông qua

, (Z ) (x:y:z) P (Z ) |y z x axz bz E

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

x y x y Z   O V

Z P O

n n

n

,

| ) 1 : : (

), ( ) 0 : 1 : 0

Đối với P  V nvà đối với bất kỳ số nguyên tố p, là ước của n, một điểm P từ tập )

(

2

p

Z

P ký hiệu là P p Rõ ràng rằng P  p O pkhi và chỉ khi P=O

Phép cộng 2 điểm P,QV nđượ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  V nmà nó thỏa mãn điều kiện sau

Nếu nhưp|n,aa(modp), và nếu như đối với p tìm được b  Z psao cho,

0 )

27

4

(

6 a3 b2  trong Z p và khi đó P p,Q pE a,b(Z p), thì R pP pQ ptrong E a,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ì

) (mod

3

2

n b ax

x

y    Từ đây chúng ta có 2 3 (mod )

n ax

x y

b   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 pnằm trên đường cong

) (mod

3

y    trong trườngZ p, thì chúng ta có thể cộng P , p Q ptrên đường cong trong trường Z pvà tính tổng P+Q trong trườngZ n Nếu như đối với một số giá trị của p

mà điểm Q pkhông nằm trên đườngy2 x3 axb(modp), 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 V n đượ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,QO,P (x1:y1: 1 ),Q (x2: y2: 1 ) Chúng ta tìm

) , (x1 x2 n

UCLN

d   bằng thuật toán Euclid Nếu như 1 d  n, thì chúng ta đã tìm được

Ngày đăng: 09/05/2021, 22:13

w