Thuật toán nhân lũy thừa bằng bình phương

Thuật toán nhân lũy thừa bằng bình phương hoặc thuật toán bình phương và nhânthuật toán tính nhanh lũy thừa tự nhiên của một số (thực hoặc nguyên), trong trường hợp cơ số là số nguyên có thể được rút gọn theo một môđun nào đó.

Phép nâng lên lũy thừa tự nhiên bậc n của số x (x được gọi là cơ số) được định nghĩa từ hệ thức

Với n lớn số phép nhân là rất lớn.

Chẳng hạn với n=35 quá trình tính qua 35 bước:
Ta nhận xét rằng có thể giảm bớt số phép nhân chẳng hạn với dãy phép tính

,,
, .

Công thức đệ quy

[sửa | sửa mã nguồn]

Quá trình tính toán trên chính là quá trình tính nhờ công thức đệ quy

  1. Với n=0 thì
  2. Với n>0 ta có công thức

Như vậy phép tính được quy về một số phép bình phương và phép nhân do vậy mà có tên gọi thuật toán bình phương và nhân.

Giải thuật đệ quy

[sửa | sửa mã nguồn]

Giải thuật sau tính đệ quy

Function Square_Multi (int x, n, m){
Var Int Power
If n=0 then return 1
Else {
n:=LShift(n,1) 
Power:= Square_Multi (int x, n, m)
Power:=(Power^2) mod m
  If n BitAnd 1 =0 then 
 Return Power
  Else 
  Return (Power*x) mod m 
} 
 }

Đoạn code viết bằng java:

public static int binhphuong (int x,int n,int m)
{
 int p;
 if (n==0) then return 1;
 p=binhphuong(x,n/2,m);
 if (n%2==0) 
return (p*p)%m;
 else
return (p*p*x)%m;
}

Chú ý rằng một số tự nhiênchẵn hay lẻ chỉ phụ thuộc vào bít số 0 của nó nên trong giải thuật trên ta sử dụng toán tử AndBit để xác định tính chãn lẻ của n và sử dụng phép LShif để tính phần nguyên của n/2.

Giải thuật không đệ quy

[sửa | sửa mã nguồn]

Trong giải thuật đệ quy trên đây ta xét tính chẵn lẻ của n và liên tục chia n cho 2 lấy phần nguyên cho đến khi n=0. Thực chất quá trình này chính là tìm các bít của n. Do đó ta có thể thực hiện phép đổi ra số nhị phân trước sau đó tính lũy thừa theo quy tắc bình phươngnhân.

Giải thuật

[sửa | sửa mã nguồn]

Đổi n ra số nhị phân ghi vào mảng

Function Power_Modulo(Int x,n,m){
Var Int Power:=1 For i=1 to k do Power:=(Power^2) mod m If b[i]=1 then Power:=(Power*x) mod m Return Power }

Trong ví dụ sau ta tính .

Đổi ra số nhị phân ta được .

Bảng sau đây tính toán từng bước theo giá trị của các bít của .

Khởi tạo .

-

Như vậy ta có

Tham khảo

[sửa | sửa mã nguồn]
Chúng tôi bán
Bài viết liên quan
Nhân vật Tokitou Muichirou - Kimetsu no Yaiba
Nhân vật Tokitou Muichirou - Kimetsu no Yaiba
Tokito Muichiro「時透 無一郎 Tokitō Muichirō​​」là Hà Trụ của Sát Quỷ Đội. Cậu là hậu duệ của Thượng Huyền Nhất Kokushibou và vị kiếm sĩ huyền thoại Tsugikuni Yoriichi.
Gianni Rivera: Nhạc trưởng số 1 của AC Milan
Gianni Rivera: Nhạc trưởng số 1 của AC Milan
Người hâm mộ bóng đá yêu mến CLB của mình vì nhiều lý do khác nhau, dù hầu hết là vì lý do địa lý hay gia đình
Silco – Ác nhân tàn bạo hay Người “cha” đáng thương cùng sự cô đơn
Silco – Ác nhân tàn bạo hay Người “cha” đáng thương cùng sự cô đơn
Silco xuất hiện và được biết đến như một kẻ độc tài máu lạnh. Là người đồng đội cũ của Vander trong công cuộc tiến công vào thành phố phồn hoa Piltover với ước mơ giải thoát dân chúng tại Zaun khỏi sự ô nhiễm
Du lịch Thái Lan – Hòa mình vào lễ hội té nước Songkran
Du lịch Thái Lan – Hòa mình vào lễ hội té nước Songkran
Người dân và khách đi tour Thái Lan đang tưng bừng trong lễ mừng năm mới và lễ hội té nước, với các lễ hội đầy màu sắc và niềm vui