Cộng hai số lớn không âm [2], [4], [5]

Một phần của tài liệu Số học số lớn cho mật mã luận án thạc sĩ (Trang 43 - 47)

6. Ý nghĩa khoa học và thực tiễn cửa đề tài

2.2.2Cộng hai số lớn không âm [2], [4], [5]

Việc cộng số nguyên lớn không âm ta tiến hành cộng lần lƣợt từ đầu danh sách đến danh sách có độ dài nhỏ nhất, sau đó ta cộng số dƣ với các số tiếp theo bắt đầu từ phần tử có độ dài lớn hơn 1 của danh sách có độ dài nhỏ, cuối cùng trả về là đối tƣợng số nguyên.

Giả sửa có hai đối tƣợng số lớn a có thuộc tính data:

a0 a1 … an và b có thuộc tính data:

b0 b1 … bm

Việc cộng hai số lớn a và b ta tiến hành nhƣ sau:

Bƣớc 1: Tìm min của độ dài hai số giả sử min(a.len, b.len) = n +1

Bƣớc 2: Ta cộng từng phần tử của số a với phần tử b từ vị trí 0 đến vị trí min(a.len, b.len) = n +1:

 Phần tử thứ 0: c = 0, t = 0

t = a0 + b0 + c; Nếu t > 9 t = t 9; c = 1. Nếu t < 9  c = 0. Thêm t vào kết quả của phép cộng.

 Tiếp theo đến phần tử thứ 1:

t = a1 + b1 + c; Nếu t > 9  t = t 9; c = 1. Nếu t < 9  c = 0. Thêm t vào kết quả của phép cộng.

….

 Tiếp theo đến phần tử thứ n + 1:

t = an + 1 + bn + 1 + c .Nếu t > 9 t = t 9; c = 1. Nếu t < 9 c = 0. Thêm t vào kết quả của phép cộng.

Bƣớc 3: Tiến hành Cộng c vào phần tử thứ n + 2 của số b đến hết  Phần tử thứ n + 2:

t = c +bn + 2 . Nếu t > 9 t = t 9; c = 1. Nếu t < 9 c = 0. Thêm t vào kết  Tiếp theo đến phần tử thứ n +3:

t = c + bn + 3 nếu t > 9 t = t 9; c = 1. Nếu t < 9 c = 0. Thêm t vào kết quả của phép cộng.

 Tiếp theo đến phần tử thứ m + 1:

t = c +bm + 1 nếu t > 9 t = t 9; c = 1. Nếu t < 9 c = 0. Thêm t vào kết quả của phép cộng.

 Cuối cùng nếu c = 1 thêm 1 vào kết quả của phép cộng.

Thí dụ: có hai số 5329 và 22 đƣợc biểu diễn trong số lớn a: 9 2 3 5

và số lớn b:

2 2

Ta tiến hành cộng hai số lớn ab theo các bƣớc trình bày ở trên:

Bƣớc 1: min(a.len,b.len) = min(4,2) = 2

Bƣớc 2: Cộng từng phần tử của a với phần tử của b từ phần tử vị trí 0 đến phần tử vị trí 2:  Phần tử thứ 0: c = 0; t = 0 t = a0 + b0 + c = 9 + 2 + 0 = 11 vì t = 11 > 9  t = 10 t = 1; c = 1. Thêm t = 1 vào kết quả: 1  Phần tử thứ 0: c = 1

t = a1 + b1 + c = 2 + 2 + 1 = 5 vì t = 5 < 9  c = 0. Thêm t = 5 vào kết quả: 1 5

Bƣớc 3: Tiến hành Cộng c = 0 vào phần tử ở vị trí thứ 3 của số b đến hết (phần tử ở vị trí thứ 4):

 Phần tử thứ 3 của b: c = 0

t = b2 + c = 3 + 0 = 3 vì t = 3 < 9 c = 0. Thêm t = 3 vào kết quả: 1 5 3

 Phần tử thứ 4 cảu b: c = 0

t = b3 + c = 5 + 0 = 5 vì t = 5 < 9 c = 0. Thêm t = 5 vào kết quả: 1 5 3 5

Kết quả cuối cùng của phép cộng hai đối tƣợng ab là đối tƣợng có thuộc tính data:

1 5 3 5 Hay: 5329 + 22 = 5351

Giải thuật cộng hai đối tƣợng số lớn không âm:

Input: Hai đối tƣợng số lớn không âm bn1, bn2 có độ dài len1len2

Output:

Đối tƣợng bn = bn1 + bn2

Algorithm: Add(bn1, bn2)

1.BigNum BN = new BigNum(), sbyte t, c = 0, int i; 2.If(BN.isNagative()) 3.n = Math.Min(bn1.len, bn2.len); 4.For (i = 0; i < n; ++i) { t = (sbyte)(bn1.data[i] + bn2.data[i] + c); if (t > 9) { t -= 10; c = 1; } else{ c = 0; } BN.data.Add(t); }

5.For (i = n; i < len1; ++i) { t = (sbyte)(bn1.data[i] + c); if (t > 9) { t -= 10; c = 1; } else{ c = 0; } BN.data.Add(t); }

5. For (i = n; i < len2; ++i) { t = (sbyte)(bn2.data[i] + c); if (t > 9) { t -= 10; c = 1; } else{ c = 0; } BN.data.Add(t); } 6 BN.len = BN.data.Count; 7.return BN;

Một phần của tài liệu Số học số lớn cho mật mã luận án thạc sĩ (Trang 43 - 47)