Thuật toán về số và số nguyên tố


CÁC THUT TOÁN V S
THUT TOÁN KIM TRA S NGUYÊN T
Thut toán ca ta  da trên ý tưởng: nếu n >1 không chia hết cho s nguyên nào trong tt c các s t 2 đến  thì n là s nguyên t. Do đó ta s kim tra tt 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 thy biu thc round(sqrt(n)) khó viết thì ta có th kim tra t 2 đến n div 2.
Hàm kim tra nguyên t nhn vào mt s nguyên n và tr li kết qu là true (đúng) nếu n là nguyên t và tr li false nếu n không là s nguyên t.
func­tion ng­to(n:in­te­ger):boolean;
var i:in­te­ger;
be­gin
    ng­to:=false;
    if n<2 then ex­it;
    for i:=2 to trunc(sqrt(n)) do
        if n mod i=0 then ex­it; {nếu n chia hết cho i thì n không là nguyên t => thoát luôn}
    ng­to:=true;
end;
Chú ý: Da trên hàm kim tra nguyên t, ta có th tìm các s nguyên t t 1 đến n bng cách cho i chy t 1 đến n và gi hàm kim tra nguyên t vi tng giá tr i.
THUT TOÁN TÍNH TNG CÁC CH S CA MT S NGUYÊN
Ý tưởng là ta chia s đó cho 10 ly dư (mod) thì được ch s hàng đơn v, và ly s đó div 10 thì s được phn còn li. Do đó s chia liên tc cho đến khi không chia được na (s đó bng 0), mi ln chia thì được mt ch s và ta cng dn ch s đó vào tng.
Hàm tính tng ch s nhn vào 1 s nguyên n và tr li kết qu là tng các ch s ca nó:
func­tion tongcs(n:in­te­ger): in­te­ger;
var s : in­te­ger;
be­gin
            s := 0;
            while n <> 0 do be­gin
                        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 cn chú ý ban đầu gán s là 1 và thc hin phép nhân s vi n mod 10.
THUT TOÁN EUCLIDE TÍNH UCLN
Ý tưởng ca thut toán Eu­clide là UCLN ca 2 s a,b cũng là UCLN ca 2 s b và a mod b, vy ta s đổi a là b, b là a mod b cho đến khi b bng 0. Khi đó UCLN là a.
Hàm UCLN nhn vào 2 s nguyên a,b và tr li kết qu là UCLN ca 2 s đó.
func­tion UCLN(a,b: in­te­ger): in­te­ger;
var r : in­te­ger;
be­gin
            while b<>0 do be­gin
                        r := a mod b;
                        a := b;
                        b := r;
            end;
            UCLN := a;
end;
Chú ý: Da trên thut toán tính UCLN ta có th kim tra được 2 s nguyên t cùng nhau hay không. Ngoài ra cũng có th dùng để ti gin phân s bng cách chia c t và mu cho UCLN.
THUT TOÁN TÍNH TNG CÁC ƯỚC S CA MT S NGUYÊN
Để tính tng các ước s ca s n, ta cho i chy t 1 đến n div 2, nếu n chia hết cho s nào thì ta cng s đó vào tng. (Chú ý cách tính này chưa xét n cũng là ước s ca n).
func­tion tongus(n : in­te­ger): in­te­ger;
var i,s : in­te­ger;
be­gin
            s := 0;
            for i := 1 to n div 2 do
                        if n mod i = 0 then s := s + i;
            tongus := s;
end;
Chú ý: Da trên thut toán tính tng ước s, ta có th kim tra được 1 s nguyên có là s hoàn thin không: s nguyên gi là s hoàn thin nếu nó bng tng các ước s ca nó.
CÁC THUT TOÁN V VÒNG LP
THUT TOÁN TÍNH GIAI THA MT S NGUYÊN
Gi­ai tha n! là tích các s t 1 đến n. Vy hàm gi­ai tha viết như sau:
func­tion gi­aithua(n : in­te­ger) : longint;
var i : in­te­ger; s : longint;
be­gin
            s := 1;
            for i := 2 to n do s := s * i;
            gi­aithua := s;
end;
THUT TOÁN TÍNH HÀM MŨ
Trong Pas­cal ta có th tính ab bng công thc exp(b*ln(a)). Tuy nhiên nếu a không phi là s dương thì không th áp dng được.
Ta có th tính hàm mũ an bng công thc lp như sau:
func­tion ham­mu(a : re­al; n : in­te­ger): re­al;
var s : re­al; i : in­te­ger;
be­gin
            s := 1;
            for i := 1 to n do s := s * a;
            ham­mu := s;
end;
THUT TOÁN TÍNH CÔNG THC CHUI
Thut toán tính hàm ex:

Đặt:  và , ta được công thc truy hi:
Khi đó, ta có th tính công thc chui trên như sau:
func­tion ex­pn(x: re­al; n : in­te­ger): re­al;
var s,r : re­al; i : in­te­ger;
be­gin
            s := 1; r := 1;
            for i := 1 to n do be­gin
                        r := r * x / i;
                        s := s + r;
            end;
            ex­pn := s;
end;

Không có nhận xét nào:

Đăng nhận xét