You are on page 1of 6

CÁC THUẬT TOÁN CƠ BẢN

1. Hàm tính tổng các chữ số trong số N (N<109)

Function TCS(K:Longint):Byte;
Var t:Byte;
Begin
TCS:=0; t:=0;
While K>0 do
begin
T:=T+ K mod 10;
K:=K Div 10;
end;
TCS:=T;
End;

2. Thuật toán kiểm tra số chính phương:

Function SCP(K:Longint):Boolean;
Begin
SCP:=False;
If K>0 then
If sqrt(k) = trunc(sqrt(k)) then
exit(True);
End;

3. Thuật toán kiểm tra số nguyên tố:

Function SNT(K:Longint):Boolean;
Var z:longint;
Begin
SNT:=True;
If K<2 then exit(False);
For z:=2 to Trunc(Sqrt(K)) do
If K mod z = 0 then
exit(False);
End;

3
3.1 Thuật toán kiểm tra số siêu nguyên tố:
Sử dụng hàm kiểm tra số nguyên tố

Function SSNT(K:Longint):Boolean;
Var z:longint;
Begin
SSNT:=False;
While SNT(K) = True do
K:=K Div 10;
If K = 0 then SSNT:=True;
End;

3.2 Thuật toán kiểm tra số song tố:


Sử dụng hàm kiểm tra số nguyên tố và hàm tính tổng các chữ số

Function SongTo(K:Longint):Boolean;
Var z:longint;
Begin
SongTo:=False;
If (SNT(K)=True) and (SNT(TCS(K))=True) then
SongTo:=True;
End;

3.3 Thuật toán phân tích N thành thừa số nguyên tố:


Kết hợp thuật toán kiểm tra số nguyên tố

Procedure PTTS(K:Longint);
Var z:Longint;
Begin
z:=2;
if SNT(K)=true then
write(K)
else
while K>1 do
if K mod z=0 then
begin
write(z, ' ' );
K:=K div z;
end
else
z:=z+1;
End;

4
4. Thuật toán tìm UCLN, BCNN (Giải thuật Euclid):
a. UCLN:
Function UCLN(x,y:longint):longint;
Var r:longint;
Begin
while y<>0 do
begin
r:=x mod y;
x:=y;
y:=r;
end;
UCLN:=x;
End;

b. BCNN: Sau khi có UCLN thì BCNN được tìm như sau:
Function BCNN(x,y:longint):longint;
Begin
BCNN:=x*y div UCLN(x,y);
End;

5. Thuật toán kiểm tra số hoàn hảo:


Function SHH(K:longint):Boolean;
Var z,u:longint;
Begin
u:=1;
SHH:=False;
for z:=2 to trunc(sqrt(k)) do
if k mod z =0 then
u:=u+z+ k div z;
if K=u then
SHH:=True;
End;

6. Thuật toán kiểm tra xâu đối xứng (Palimdrome):


Function DX(s: string): Boolean;
Var z: integer;
Begin
DX:=True;
for z:= 1 to length(s) div 2 do
if s[z] <> s[length(s)-z+1] then
exit(false);
End;

5
7. Thuật toán chuyển N từ hệ thập phân sang hệ nhị phân:

Function NP(K:Longint):String;
Var S,sd:string;
Begin
S:='';
while K>0 do
begin
str(K mod 2,sd);
S:=Sd+S;
K:= K div 2;
end;
NP:=S;
End;

8. Thuật toán sắp xếp dãy số tăng dần (Sắp xếp nổi bọt):

Procedure Sapxep;
Var i,j,temp:longint;
Begin
For i:=1 to N-1 do
For j:=i+1 to N do
If A[i]>A[j] Then
begin
Temp:=A[i];
A[i]:=A[j];
A[j]:=Temp;
end;
End;

Code Quicksort : trong thư mục …demo/text


9. Thuật toán lọc số từ mảng A sang mảng B:
Kết hợp thuật toán kiểm tra số, ví dụ kiểm tra số chính phương

Procedure Locso;
Var z,d:longint;
Begin
d:=0;
For z:=1 to N do
If SCP(A[z])=true then
Begin
d:=d+1;
B[d]:=A[z];
End;
End;

6
10. Thuật toán kiểm tra năm nhuận:
Function Nhuan(Y:integer):Boolean;
Begin
Nhuan:=False;
If ((Y mod 4=0) and (Y mod 100<>0)) or (Y mod 400=0) then
Nhuan:=True;
End;
10.1:Thuật toán tính ngày theo tháng, năm:
Kết hợp hàm kiểm tra năm nhuận
Function Ngay(D:integer;Y:integer):integer;
Begin
Case D of
1,3,5,7,8,10,12:Ngay:=31;
4,6,9,11:Ngay:=30;
2: If Nhuan(Y)=True then Ngay:=29 Else Ngay:=28;
End;
End;
10.2: Thuật toán kiểm tra tính hợp lệ của ngày tháng năm (D,M,Y)
Function KTDAY(D,M,Y:integer):Boolean;
Begin
KTDAY:=False;
if Y>0 then
if (M<=12) and (M >=1) then
if (ngay(M,Y)>=D) and (D>0) then KTDAY:=True;
End;

11. Thuật toán đếm phân phối:


Dữ liệu cho: 1 mảng số nguyên A, tìm giá trị nhỏ nhất không xuất hiện trong dãy.
Procedure Tim;
Var z,k:longint;
Begin
For z:=1 to N do
Begin
Read(K);
A[k]:=A[k]+1;
End;
For z:=1 to N do
If A[z]=0 then
Begin
Write(z); Break;
End;
End;
7
12. Thuật toán so sánh 2 số lớn:

Function MaxSL(A,B:string):String;
Var t:string;
Begin
while length(A)>length(B) do B:='0'+B;
while length(A)<length(B) do A:='0'+A;
t:=A;
If t<B then t:=B;
MaxSL:=t;
End;

13. Thuật toán cộng 2 số nguyên lớn:

Function CSL(A,B:string):String;
Var T,t1:String;
i, j, c, x, y, nho, z, k:integer;
Begin
T:='';
nho:=0;
while length(A)>length(B) do B:='0'+B;
while length(A)<length(B) do A:='0'+A;
For i:=length(A) downto 1 do
begin
val(A[i],x,c);
val(B[i],y,c);
z:=x+y+nho;
nho:= z div 10;
k:= z mod 10;
str(k,t1);
T:=t1+T;
end;
if nho=1 then
T:='1'+T;
CSL:=T;
End;

You might also like