CÁC THUẬT TOÁN VỀ SỐ
THUẬT TOÁN KIỂM TRA SỐ NGUYÊN TỐ
Thuật toán của ta dựa
trên ý tưởng: nếu
n >1 không chia hết cho số
nguyên nào trong tất cả
các số từ 2 đến
thì n là số nguyên tố.
Do đó ta sẽ
kiểm tra tất cả
các số nguyên từ 2 đến
có round(sqrt(n)), nếu n không chia hết cho số nào trong đó thì n
là số
nguyên tố.
Nếu thấy biểu
thức round(sqrt(n)) khó viết thì ta có thể kiểm tra từ 2
đến n div 2.
Hàm kiểm tra nguyên tố nhận
vào một số nguyên n và trả lại kết quả
là true (đúng)
nếu n là nguyên tố và trả lại false nếu n không là số
nguyên tố.
function ngto(n:integer):boolean;
var i:integer;
begin
ngto:=false;
if
n<2 then exit;
for i:=2 to trunc(sqrt(n)) do
if n mod i=0 then exit; {nếu n chia hết
cho i thì n không là nguyên tố => thoát luôn}
ngto:=true;
end;
Chú ý: Dựa trên hàm kiểm tra nguyên tố,
ta có thể tìm các số
nguyên tố từ 1
đến n bằng cách cho i chạy từ 1 đến
n và gọi hàm kiểm tra nguyên tố với từng giá trị
i.
THUẬT TOÁN TÍNH TỔNG CÁC CHỮ SỐ CỦA MỘT SỐ NGUYÊN
Ý tưởng là ta chia số đó cho 10 lấy dư
(mod) thì được chữ số hàng đơn vị,
và lấy số đó div 10 thì sẽ được phần
còn lại. Do đó sẽ chia liên tục cho đến
khi không chia được nữa
(số đó bằng 0), mỗi lần
chia thì được một
chữ số và ta cộng
dồn chữ số đó vào tổng.
Hàm tính tổng chữ số
nhận vào 1 số nguyên n và trả lại kết quả
là tổng các chữ số của nó:
function tongcs(n:integer):
integer;
var s : integer;
begin
s := 0;
while n <> 0 do begin
s := s + n mod 10;
n := n div 10;
end;
tongcs := s;
end;
Chú ý: Tính tích các
chữ số cũng
tương tự, chỉ cần chú ý ban đầu gán s là 1 và thực hiện phép nhân s với
n mod 10.
THUẬT TOÁN EUCLIDE TÍNH UCLN
Ý tưởng của thuật
toán Euclide là UCLN của 2 số
a,b cũng là
UCLN của 2 số b và a mod b, vậy ta sẽ đổi
a là b, b là a mod b cho đến khi b bằng
0. Khi đó UCLN là a.
Hàm UCLN nhận vào 2 số nguyên a,b và trả lại kết
quả là UCLN của 2 số đó.
function UCLN(a,b:
integer): integer;
var r : integer;
begin
while b<>0 do begin
r := a mod b;
a := b;
b := r;
end;
UCLN := a;
end;
Chú ý: Dựa trên thuật toán tính UCLN ta có thể kiểm tra được
2 số nguyên tố cùng nhau hay không. Ngoài ra cũng có
thể dùng để tối
giản phân số bằng
cách chia cả tử
và mẫu cho UCLN.
THUẬT TOÁN TÍNH TỔNG CÁC ƯỚC SỐ CỦA MỘT SỐ NGUYÊN
Để tính tổng các ước số của số n, ta cho i chạy
từ 1 đến n div 2, nếu
n chia hết cho số
nào thì ta cộng số đó vào tổng. (Chú ý cách tính này chưa xét n cũng là ước
số của n).
function tongus(n :
integer): integer;
var i,s : integer;
begin
s := 0;
for i := 1 to n div 2 do
if n mod i = 0 then s := s + i;
tongus := s;
end;
Chú ý: Dựa trên thuật toán tính tổng
ước số, ta có thể
kiểm tra được 1 số
nguyên có là số hoàn thiện
không: số nguyên gọi
là số hoàn thiện nếu
nó bằng tổng các ước
số của nó.
CÁC THUẬT TOÁN VỀ VÒNG LẶP
THUẬT TOÁN TÍNH GIAI THỪA MỘT SỐ NGUYÊN
Giai thừa n! là tích các số từ 1
đến n. Vậy hàm giai thừa
viết như sau:
function giaithua(n
: integer) : longint;
var i : integer; s
: longint;
begin
s := 1;
for i := 2 to n do s := s * i;
giaithua := s;
end;
THUẬT TOÁN TÍNH HÀM MŨ
Trong Pascal ta có
thể tính ab bằng công thức
exp(b*ln(a)). Tuy nhiên nếu a không phải
là số dương thì không thể
áp dụng được.
Ta có thể tính hàm mũ an bằng
công thức lặp như
sau:
function hammu(a :
real; n : integer): real;
var s : real; i : integer;
begin
s := 1;
for i := 1 to n do s := s * a;
hammu := s;
end;
THUẬT TOÁN TÍNH CÔNG THỨC CHUỖI
Thuật toán tính hàm ex:
Đặt: và , ta được công thức truy hồi:
Khi đó, ta có thể tính công thức
chuỗi trên như sau:
function expn(x: real;
n : integer): real;
var s,r : real; i :
integer;
begin
s := 1; r := 1;
for i := 1 to n do begin
r := r * x / i;
s := s + r;
end;
expn := s;
end;
Không có nhận xét nào:
Đăng nhận xét