Kỹ thuật lập trình & Một số thuật toán trong ngôn ngữ lập trình C++

68 1.4K 2
Kỹ thuật lập trình & Một số thuật toán trong ngôn ngữ lập trình C++

Đ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

Luận văn : Kỹ thuật lập trình & Một số thuật toán trong ngôn ngữ lập trình C++

Lời nói đầu Bài toán phân tích số nguyên thừa số nguyên tố đà đợc đời từ lâu đà có nhiều nhà toán học giới nghiên cứu giải vấn đề Ngoài ý nghĩa lý thuyết thân toán ngời ta phát nhiều ý nghĩa thực tiễn đặc biệt mật mà Thứ sở cho đời hệ mật khoá công khai tiếng đời năm 1978, hệ mật RSA Revert - Shamir - Adlemal Hệ mật mà độ mật dựa vào tính khó việc phân tÝch sè N=pq (p, q nguyªn tè ) thõa số Tiếp đến việc thiết kế nên tạo dÃy giả ngẫu nhiên nguyên liệu đa thức nguyên thuỷ mà để tạo đợc đa thức nguyên thuỷ bậc m điều phải giải phân tích hoàn toàn với 2m-1 thừa số nguyên tố Để giải vấn đề đợc đặt đồ án này, đa số sở lý thuyết Chơng trình bầy số Mersenne Các số có dạng Mq=2q-1 (với q nguyên tố ) đợc gọi số Mersenne đà đợc nghiên cứu công phu Chơng xem xét loại toán quen thuộc toán phân tích số nguyên thừa số Sự đóng góp có tính khoa học thề việc trình bày thuật toán phân tích số nguyên tố theo cách hiểu Chơng phần đề án, trình bày t tởng thuật toán phân tích thừa số nguyên tố số nguyên lớn Tiếp theo chơng trình bày cài đặt cụ thể cho thuật toán liên quan đến việc phân tích thừa số nguyên tố, ví dụ nh phép : +, -, *, / luỹ thừa số lớn Chúng đặc biệt lu ý tới việc cài đặt thuật toán Pollard thứ thuật toán hiêụ việc phân tích hợp số lớn Một vấn đề không nói trớc vấn đề đợc hiểu thấu đáo đợc trình bày chi tiết mức độ thuật toán khả thi việc lập trình, số kết cần đến chuẩn bị toán học cao siêu đợc dẫn đánh giá tơng ứng thời gian tính đủ rút thông số cần thiết để xây dựng tiêu trí Chúng nghĩ trình bày báo cáo theo cách nh đảm bảo tính cân đối cấu trúc để làm cho tờng minh dù vấn đề đà né tránh phải cần đến hàng tập tài liệu dầy, ®Êy lµ cha kĨ ®Õn viƯc chóng ta cã ®đ kiến thức cần thiết đến mức để trình bày cho ngời rõ hay không Chơng i Đặt vấn đề ý nghĩa bàI toán Bài toán phân tích số nguyên thừa số nguyên tố đà đợc đời từ lâu đà hút nhiều óc vĩ đại giới để giải vấn đề Ngoài ý nghĩa lý thuyết thân toán ngời ta phát nhiều ý nghĩa thực tiễn đặc biệt mật mà Thứ nhất, sở cho đời hệ mật khoá công khai tiếng vào năm 1978, lµ hƯ mËt m· RSA ( RSA lµ tõ viÕt t¾t cđa ba ngêi: Rivets – Shamir – Adleman ) Hệ mật có nội dung đề cập đến việc phân tích số nguyên tố ngẫu nhiên lớn (chẳng hạn có 80 chữ số) thừa số Một vấn đề quan trọng cần phải kiểm tra số nguyên ngẫu nhiên (với kích thớc xác định) tìm đợc số nguyên tố Một kết nỗi tiếng lý thuyết số (đợc gọi định lý số nguyên tố) phát biểu rằng: số số nguyên tố không lớn N xấp xỉ N/ln N Bởi vậy, p đợc chọn ngẫu nhiên xác suất p số nguyên tố vào khoảng 1/ln p Với mođun 512 bít, ta có 1/ln p 1/77 Điều có nghĩa tính trung bình, 177 số nguyên ngẫu nhiên p với kích thớc tơng ứng có số số nguyên tố Dĩ nhiên, hạn chế xét số nguyên lẻ xác suất tăng gấp đôi tới khoảng 2/177) Bỡi thực tế, hoàn toàn có khả tạo đợc nguyên tố đủ lớn mặt thực thể ta thiết lập đợc hệ mật RSA Tiếp đến việc thiết kế nên tạo dÃy giả ngẫu nhiên nguyên liệu đa thức nguyên thuỷ mà để tạo đợc đa thức nguyên thuỷ bậc m điều phải giải phân tích hoàn toàn với 2m-1 thừa số nguyên tố Để kiểm tra tính nguyên thủ cđa chóng b»ng c¸ch dïng tht to¸n x¸c st Monte- Carlo thời gian đa thức, thuật toán nhanh (tức số nguyên n đợc kiểm tra thời đa thức theo log2n, số bít biểu diện nhị phân n) Tuy nhiên, có khả thuật toán cho n số nguyên tố thực tế n hợp số Bởi vậy, cách thay đổi thuật toán nhiều lần, giảm xác suất sai số dới mức ngỡng cho phép Bản đồ án không sâu vào phân tích ý nghĩa nêu mà đà đặt nhiệm vụ giải toán phân tích số nguyên thừa số nguyên tố nh lµ mét viƯc lµm trung gian cđa mét øng dụng thực tiễn cụ thể Đà có khối lợng khổng lồ tài liệu thuật toán phân tích thừa số việc nghiên cứu kỹ lỡng đòi hỏi phải có sách dày trang sách cố gắng đa nhìn khái quát bao gồm việc thảo luận sơ lợc thuật toán phân tích thừa số tốt thời cách sử dụng chúng thực tế Các thuật toán tiếng khác (những tht to¸n to¸n cã tríc) bao gåm tht to¸n p+1 Williams, phơng pháp thuật toán p-1 Pollard, thuật toán liên phân số dĩ nhiên phép chia thử Chơng iI Số Mersenne viƯc ph©n tÝch 2.1 Sè Mersenne NÕu mét sè cã dạng 2m-1 số nguyên tố m=q số nguyên tố Không khó khăn lắm, chứng minh đợc 2m-1 luỹ thừa số Prime Power phải số nguyên tố m số nguyên tố Các số có dạng Mq=2q-1 (với q nguyên tố ) đợc gọi số Mersenne đà đợc nghiên cứu công phu vào thời đại Mersenne, ngời ta đà biết vài số Mersenne số phơng vài số khác hợp số Ví dụ, M2=3, M3=7, M5=31, M7=127 nguyên tố, M11=23*89 Vào năm 1640 , Mersenne đà cho Mq số nguyên tố q=13,17,19,31,67,127,257; ông đà nhầm 67 257 đà không đa 61,89 107(những số nhỏ 257) vào danh sách Những số sinh số nguyên tố Mersenne Phát ông thực đáng kinh ngạc mặt độ lớn số Một toán hiển nhiên là: Xét xem số Mersenne có số nguyên tố không, không xác định thừa số ( hay gọi toán phân tích thừa số) Một kết cổ điển Euler đa năm 1750 sau đợc Lagrange (1775) Lucas (1875) chứng minh là: Bài toán: Nếu q số nguyên tố đồng d modulo 4(q3(mod 4)) Mq chia hÕt cho 2q+1 vµ chØ 2q+1 nguyên tố; trờng hợp này, q>3 Mq hợp số Chứng minh: Cho n=2q+1 thừa số M Vì 22#1 (mod n) nên 2q#1 (mod n), 22q-1=(2q+1)Mq0 (mod n), từ phép thử Lucas suy n số nguyên tố Ngợc lại, cho p=2q+1 số nguyên tố Vì p7(mod 8) nên (2/p)=1, tồn m cho 2m2 (mod p) Điều chứng tỏ 2q≡2(p-1)/ ≡mp-1≡1(mod p) V× vËy Mq chia hÕt cho p Hơn nữa, q>3 Mq=2q-1>29+1=p, Mq hợp số Vì q=11, 23, 83, 131, 179, 191, 239, 251, Mq có ớc tơng øng lµ 23, 47, 167, 263, 350, 383, 479, 503 Cũng dễ để xác định hình dạng thõa sè cđa c¸c sè Mersenne: "NÕu Mq chia hÕt cho n n1 (mod 8) n1 (mod q)" Chøng minh: ChØ cÇn chØ r»ng mäi thõa sè nguyên tố p Mq có dạng đủ Thật vậy, p ớc Mq=2q-1 2q1 (mod q); Vì theo toán nhỏ Fermat q ớc p-1, tức p-1=2kq (vì p#2) V× vËy: ( ) ≡ ( p −1) / ≡ qk ≡ (mod p) p Do p1 mod (8) Phơng pháp tốt dùng để xác định Mq số nguyên tố hợp số đợc phát triển dựa vào việc tính toán dÃy đệ qui Lucas (1878) Lehmer (1930) đa Tuy nhiên, cách không tìm đợc thừa số cụ thể Nếu n lẻ, n3 Mn=2n-17 (mod 12) §ång thêi, nÕu N≡7 (mod 12) th× ký hiƯu Jacobi: ( N ) = ( )(−1) ( N −1) / = −1 N 2.2 PhÐp thư nguyªn tố cho số Mersenne Cho p=2,Q=-2 xét d·y Lucas kÐp (Um)m≥0,(Vm)m≥0, cã biƯt gthøc D=12 N=Mn lµ số nguyên tố V(N-1)/2 chia hÕt cho N Chøng minh: Cho N lµ mét sè nguyên tố Ta có: V2(N+1)/2=VN+1+2Q(N-1)/2=VN-1-4(-2)(N-1)/2 VN+1-4(-2/N) VN+1+4(mod N) Vì (-2/N)=(-1/N)(2/N)=-1 Vì cần N7 (mod N) Theo (IV.4): 2VN-1=VNV1+DUNU1=2VN+12UN; vËy theo (IV.14) vµ (IV.13): VN+1=VN+6VN2+6(12/N) 2-6-4(mod N) Ngợc lại, giả sử V(N+1)/2 chia hÕt cho N ThÕ th× theo (IV.2), VN+1 chia hÕt cho N §ång thêi, theo(IV.6): V2(N+1).2)=1 (gcd_íc chung lín nhÊt) Vì gcd(N,2)=1, nên thu phép thử (Phần V), N số nguyên tố Để cho tính toán, ngời ta thay dẫy Lucas (Vm)m>=0 dẫy (Sk)k>=1 đợc định nghĩa nh sau: S0=4; Sk+1=S2k-2; Vì dẫy khởi đầu 4,14,194, phép thử nguyên tố đợc phát biểu lại nh sau: Mn=2n-1 nguyên tè vµ chØ Mn lµ íc cđa Sn-2 Chøng minh: S0=4=V2/2 Gi¶ sư r»ng Sk-1=V2k/ 2 k −1 ; th× Sk=S2k-1-2= V22 k 22 k −2= V k +1 + 2 22 k k +1 −2= V2 k +1 22 k Theo phÐp thö Mn nguyên n 2 tố vµ chØ Mn lµ íc cđa V(Mn+1).2=V2 = S n , hay tơng đơng Mn ớc n Sn-2 Tính lặp phép tính đà làm cho phép thử trở nên phù hợp Bằng cách này, tất ví dụ số nguyên tố Mersenne lớn đà đợc tìm Năm 1876 , Lucas đà tự tìm M127 nguyên tố M67 hợp số Sau không lâu, Pervushin đà M61 nguyên tố Cuối cùng, vào năm 1927 Lehmer chứng minh đợc M257 hợp số Chú ý M127 có 39 chữ số số nguyên tố lớn đợc biết tới trớc kỷ nguyên máy tính Các số nguyên tố Mersenne với q1 ớc N Dừng chơng trình Ngợc lại quay (1) Bây hÃy tạm dừng để phân tích thuật toán dới góc độ xác suất nh sau: Cho p ớc nguyên tố nhỏ N, cần có tối thiểu cặp a, b đợc xét đến xác suất { có mét cỈp a, b chia hÕt cho p} > 0.5” {int i,nho=0,d=do_dai_SL(x); for (i=0;iy[i]) {x[i]-=y[i]; x[i]-=nho; nho=0; } else {if (x[i]==y[i]) x[i]=0-nho; else {x[i]-=nho; x[i]-=y[i]; nho=1; } } } } void nhan_WORD(SL x,SL y,WORD k) {int i; LONG t,nho=0; if (k==0) {memset(y,0,2*C);return;} if (k==1) {memcpy(y,x,2*C);return;} memset(y,0,2*C); int d=do_dai_SL(x); for (i=0;i>=16; } y[d+1]=(WORD) nho; } void nhan_SL(SL x,SL y) {int i,j,k,d=do_dai_SL(x); LONG r,t1=0,nho=0; memset(KEP,0,4*C); for (i=0;i=16; nho+=t1; t1=0; } for (i=d+1;i=16; nho+=t1; t1=0; } for (i=C;i=16; nho+=t1; t1=0; } while (nho) {KEP[i++]=(WORD) nho; nho>>=16; } } void binh_phuong_SL(SL x) {int i,j,k,d,s; LONG r,t1=0,nho=0; memset(KEP,0,4*C); nho=(LONG) x[0]; nho*=x[0]; KEP[0]=(WORD) nho; nho>>=16; d=do_dai_SL(x); for (i=1;i>1; if ((i&1)==0) {r=(LONG) x[s]; r*=x[s]; t1+=r>>16; nho+=thap(r); s ; } j=i; for (k=0;k>16)16)=16; } } void modulo_SL(SL r) {int d=2*C-1; while ((KEP[d]==0)&&(d>0)) d ; if (d=C-3;i ) {int j=i-C+3; m=KEP[i+1]; m=0;i ) {nho

Ngày đăng: 17/12/2012, 12:06

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan