You are on page 1of 20

Chuyn

THUT TON S HC
Tc gi: Trn quang Khi I. Gii thiu chung S hc thut ton (Algorithmic number theory) l mt ngnh ton hc ang pht trin mnh, nghin cu s hc trn phng din thut ton. Ta cn ch rng S hc l mt trong nhng ngnh ton hc c nht cn thut ton li l mt khi nim mi m ra i v pht trin t trong th k XX. S hc thut ton c xy dng trn c s nhng thnh tu ca c l thuyt s hc ln thut ton. Mt trong nhng bi ton ni ting nht oc gii quyt trong th k XX l bi ton th 10 ca Hilbert C tn ti mt thut ton tng qut cho php ta tr li mt phng trnh Diophantine cho trc c nghim hay khng ?. Phng trnh Diophantine l phng trnh c dng f(x, y, z, ) = 0 trong f(x, y, z, ) l a thc ca cc bin x, y, z, c cc h s nguyn, v cc bin ch nhn gi tr nguyn. Bi ton ny c Michiakvch gii quyt trn vn v cu tr li l ph nh, tc l khng c thut ton nh vy. Bi ton th 10 ca Hilbert c gii quyt l mt thnh tu quan trng ca s hc cng nh thut ton. S hc thut ton khng ch pht trin trn nhng thnh tu ca S hc s cp, m n cn tn dng nhng thnh tu ca S hc hin i, i s hin i, Hnh hc i s Cng nh cc ngnh ton hc - thut ton khc, trong S hc thut ton cng c nhng bi ton NP, tc l khng c thut gii trong thi gian a thc, tiu biu l bi ton phn tch mt s ra cc tha s nguyn t, thut ton kim tra nguyn t, Trong bi vit ny, ta ch cp ti nhng vn c bn nht ca S hc thut ton, v trn c s ca ton hc s cp. II. Cc php tnh vi s nguyn Trong my tnh, cc s u c biu din h nh phn, hn na vic m t di dng nh phn lm cho cc php tnh tr nn n gin hn rt nhiu. cho tng qut, ta gi s hai ton hng u c ng N bit (trong trng hp s cc bt c ngha nh hn N th ta thm 0 vo u cho ). 1. Php cng v php tr i vi php cng v php nhn cc s N bt, ta c th thc hin ging nh php cng tr trn h thp phn : Thc hin cng (hay tr) t phi sang tri (vi bt ng vi s m nh trc ri s m ln sau).

1. Php nhn i vi php nhn, ta c thut ton nhn Nga c m t nh sau : Function Mult(a, b : Integer): Integer; Var c : Integer; Begin c := 0; repeat if Odd(b) then c := c + a; a := a shl 1; b := b shr 1; until b = 0; Mult := c; End; Nu xt cho k th thc ra thut ton nhn Nga c cng mt dng vi thut ton nhn hai s bng phng php m bnh thng ta vn dng tnh tay, ch c iu khc l thao tc trn h nh phn. Thut ton nhn Nga gm N ln dch bt, trong trng hp tng qut phi thc hin N/2 ln php cng, do phc tp tnh ton l N2. Sau y, ta s gii thiu mt thut ton nhn khc, tuy phc tp hn nhng c phc tp nh hn. Gi s ta phi thc hin php nhn vi hai s c 2N bit A v B. Phn tch : A = a1*2N + a2 B = b1*2N + b2. AB = a1*b1 * 22N + (a1b2 + a2b1)*2N + a2b2.

Ta ch rng php nhn vi mt lu tha ca 2 cng nh php cng c thi gian t l vi N. Nhn xt : (a1+a2)(b1 + b2) - a1b1 - a2b2 = a1b2 + a2b1. Do nu bit (a1+a2)(b1 + b2), a1b1, a2b2 th c th tnh c a1b2 + a2b1. Qui v nhn hai s 2N bit v 2 ln nhn N bit v mt s php tnh c thi gian t l vi N. Nu gi F(n) l thi gian nhiu nht thc hin php nhn hai s c 2n bit, ta c F(n) = 3F(n-1) + k2n (*) trong k l mt hng s th hin chi ph cc php tnh cng v dch bit trong mi bc gi qui. Chia c hai v ca (*) cho 2n ta c

. Do , F(n) = O(3 ) = O( gian thc hin php nhn hai s N bt c phc tp c O( 3. Php chia

) hay ni cch khc thi ).

Trong phn ny, ta s trnh by thut ton chia hai s nh phn c N bt A = (A1A2A3AN)2, B = (B1B2BN)2 cho kt qu thng Q, d R. +Bc 1:Q 0, R 0, i 0 +Bc 2: i = i+1. Nu i > N kt thc thut ton, ngc li Bc 3. +Bc 3: R (R shl 1) or (A[i]). Nu R B Bc 4, ngc li Bc 5. +Bc 4: R R - B, C[i] = 1. Thc hin Bc 2. +Bc 5: C[i] = 0. Thc hin Bc 2. Hay ta c th m t bng chng trnh : Procedure Divide(A, B : LongInt; var Q, R : LongInt); Var i : Integer; Begin

Q := 0; R := 0; For i := 1 to N do Begin If (A and (1 shl (N-i)) <> 0) then R := (R shl 1)+1 else R := R shl 1; if R >= B then Begin Q := Q or (1 shl (N-i)); R := R - B; End; End; End; nh gi phc tp: Thut ton chia c phc tp (N2). III. Thut ton Euclid 1. Thut ton Euclid Thut ton Euclid dng tm c chung ln nht ca hai s nguyn dng m, n. Thut ton tin hnh nh sau : Bc 0: t a = m, b = n. Bc 1: Nu a > b ta thay a bng phn d ca php chia a cho b, ngc li thay b bng phn d ca php chia b cho a. Bc 2: Nu a hoc b bng 0, th kt qu l a + b, ngc li thc hin bc 1. Hay thut ton c m t bng mt hm trong ngn ng Pascal nh sau : Function Euclid(m, n : Integer) : Integer;

Var a, b : Integer; Begin a := m; repeat if a > b then a := a mod b else b := b mod a; until (a = 0) or (b = 0); Euclid := a + b; End; Ta cng c cch vit khc nh sau : Function Euclid1(m, n : Integer) : Integer; Var a, b, r : Integer; Begin a := m; repeat r := a mod b; a := b; b := r; until b = 0; Euclid := a; End; b := n; b := n;

Trong s hc ta bit rng vi hai s nguyn dng m, n bt k v d l c chung ca chng th lun tn ti hai s nguyn u, v sao cho u*m + v*n = d. T thut ton Euclid ta cng c th ch ra c c th mt cp (u, v) nh vy : Ta ch rng ti mi bc ca vng lp repeat, a v b u tn ti cp (x, y) vi x, y Z tho mn x*m + y*n = a (= b). Ban u a = m c mt cp tng ng l (1, 0), cp tng ng vi b = n l (0, 1) v : 1*m + 0*n = m = a 0*m + 1*n = n = b Trong vng lp, ta c php gn a := a mod b, php gn ny tng ng a := a - q*b trong q l thng ca php chia a cho b (q := a div b). Khi cp (xa, ya) tng ng vi a bin i tng ng

xa := xa - q*xb ya := ya - q*yb
Nh vy, a v b lun c th biu din di dng x*m + y*n v kt qu c chung bng a + b s c cp x, y tng ng l xa + xb , ya + yb. Nh vy, thut ton tm cp u, v trn c s thut ton Euclid s c vit nh sau : Procedure Euclid2(m, n : Integer; var u, v : Integer); Var a, b, q, r : Integer; xa, ya, xb, yb, xt, yt : Integer; Begin a := m; b := n; xa := 1; ya := 0; xb := 0; yb := 1;

repeat q := a div b; r := a mod b; a := b; b := r; xt := xa; yt := ya; xa := xb; ya := yb; xb := xt - q*xb; yb := yt - q*yb; until b = 0; u := xa; v := ya; End; nh gi phc tp ca thut ton Euclid : Nu ta gi (ai, bi) l cp a, b vng lp th i, nh s theo chiu ngc li ( kt thc l (a1, b1), trc l (a2, b2), (a3, b3) , (as, bs)). Ta c th chng minh bng qui np max{ak, bk) Fk trong Fk l s th k trong dy Fibonaci. Ta c cng thc sau :

Fn = Fn tng theo hm m, thut ton Euclid c phc tp lgarit ca max(m, n). Ta ch rng cch nh gi ny b qua thi gian thc hin php chia (mod) (trong my tnh y l mt lnh ca CPU), tuy nhin thut ton chia thc hin vi hai s N bt ni chung mt khong N2. Do nu xt chi tit, thut ton Euclid c phc tp c O((log(max{m, n})3). 2. Thut ton Euclid nh phn

Sau y, ta s trnh by mt dng Quay v Bc 1. + Bc 3 : Chng no khc ca thut ton Euclid c phc tp nh hn. Ta c nhn xt sau : c chung l ln nht ca hai s a, b khng ph thuc vo cc php bin i sau : + Chia a (hoc b) nu a (hoc b) chn. + Thay a bng a - b. Thut ton c th m t nh sau : + Bc 0 : a = m, b = n, dem = 0. + Bc 1 : Nu c a v b u chn th Bc 2 ngc li Bc 3. + Bc 2 : dem = dem + 1, chia c a v b cho 2, a cn chn th chia a cho 2, thc hin tng t vi b. + Bc 4 : Nu a = b Bc 6, ngc li Bc 5.; + Bc 5 : Nu a > b a := a - b, ngc li b := b - a. Thc hin Bc 3. + Bc 6 : c := a * 2dem ( dch c sanh tri s bit bng dem ) Thut ton kt thc v c l c chung ln nht cn tm. Ta c th mt t bng chng trnh Pascal nh sau : Function BinaryEuclid(m, n : Integer) : Integer; Var a, b, dem : Integer; Begin a := m; b := n; dem := 0; while (not Odd(a)) and (not Odd(b)) do begin

Inc(dem); a := a shr 1; b := b shr 1; end; repeat while not Odd(a) do a := a shr 1; while not Odd(b) do b := b shr 1; if a = b then Break; if a > b then a := a - b else b := b - a; until a = b; BinaryEuclid := a shl dem; End; V cc s c m t di dng nh phn nn r rng cc php chia 2 c th thc hin n gin bng php dch phi. Nu m, n c th m t bng N bt th php dch c chi ph bng N, php tr cng c chi ph bng N (xem phn II). Mt khc, sau mi php tr l t nht mt php dch bt v ta d thy c khng qu 2N ln dch bit. Do phc tp ca thut ton c N2 hay log(max{m, n})2. Ta cng cn ch rng php mod l mt lnh ca h thng nn i vi cc s m, n khng qu ln (trong phm vi 231) th thut ton Euclid nu mc 1 chy nhanh hn thut ton m t y. Cn khi ta phi lm vic vi cc s ln th thut ton Euclid nh phn thch hp hn. Thut ton ny khng ch c phc tp nh hn m c mt li th khc l ta ch phi thc hin php dch bt v php tr l nhng php tnh rt n gin, trong khi thut ton Euclid phi thc hin php chia vit kh phc tp. IV. Gii phng trnh nghim nguyn tuyn tnh 1. Phng trnh ng d ax b(mod c) (*) Vi a, b, c u l cc s nguyn dng.

Gi d l c chung ln nht ca a v c. Kt qu t s hc cho ta phng trnh c nghim khi v ch khi b chia ht d v nu (*) c nghim th s c v s nghim dng x = x0 + k * e vi k Z, e = c / d v x0 l mt nghim ca (*). Nh vy, ta c th d dng kim tra phng trnh c nhim hay khng. Vn cn li l tm mt nghim x0 tho mn phng trnh. Ta ch rng thut ton Euclid c th ch ra hai s u, v sao cho u *a + v * c = d, tc l u*a d (mod c) nu x0 = u * (b / d) (ch phng trnh c nghim b chia ht cho d) th a*x0 b (mod c), tc l x0 tho mn (*). Chng trnh Pascal gii phng trnh (*) nh sau : Procedure Solve1(a, b, c : Integer); Var d, e, b1, u, v : Integer; Begin Euclid2(a, c, u, v); d := u*a + v*c; if b mod d <> 0 then Writeln(No solution ) else begin e := c div d; b1 := b div d; Writeln(Equation has infinite solution); Write(All solutions have form : ); Writeln( x = , u*b1 , + k*, e); end; End; 2. Phng trnh Diophantine tuyn tnh dng a*x + b*y = c. (**)

vi a, b, c Z+ Ta c th d thy phng trnh Diophantine ny c th a v gii phng trnh ng d tuyn tnh.

(**) Vic gii phng trnh ng d tuyn tnh c trnh by mc 1. Ch : Gi d = UCLN(a, b) a1 = a / d b1 = b / d (**) c nghim khi v ch khi c 0 (mod d). (**) nu c nghim th s c v s nghim, cng thc nghim : (x, y) = (x0, y0) + k (-b1, a1). Vi (x0, y0) l mt nghim no ca (**). 3. nh l ng d Trung Hoa. nh l : Cho m s nguyn dng a1, a2, a3, am i mt nguyn t cng nhau, v m s nguyn b1, b2, b3, bm tho mn 0 bi ai - 1 i= 1, 2, , m. t M = a1*a2**am. Khi tn ti v duy nht s nguyn x tho mn : 0 x M - 1 v x bi (mod ai) i = 1, 2, , m. nh l ng d Trung Hoa c trnh by v chng minh trong hu ht cc gio trnh S hc. Sau y ta s tm hiu thut ton ch ra c th s x nh vy. Ta ch rng nghim tng ng vi k rng buc u (ng vi cc s a1, b1, a2, b2, ak, bk) s c dng x = xk + Mk. Trong Mk = a1* a2* * ak v xk l nghim tho mn nh l ng d Trung Hoa tng ng vi a1, b1, a2, b2, ak, bk.

D thy khi xk+1 l nghim khng m nh nht tho mn h x bk+1(mod ak+1) x xk (mod Mk). Kt qu cui cng, s tha mn bi ton l xm. Nh vy, ta a vic gii m phng trnh v m-1 ln gii h hai phng trnh. Ta gii h hai phng trnh nh sau : V x xk (mod Mk) nn x = xk + y * Mk, bi ton tr thnh tm nghim khng m nh nht ca phng trnh ng d xk + y * Mk bk+1(mod ak+1). phn 1, ta gii phng trnh ny cho nhim c dng y = y0 + t*ak+1 (v ak+1 v Mk nguyn t cng nhau). T cng thc nghim, d thy y khng m nh nht = y0 mod ak+1. V. Thut ton kim tra nguyn t Bi ton : Kim tra mt s n > 1 cho trc c phi l nguyn t hay khng ? 1. Tip cn bi ton qua mt s thut ton n gin Theo ng nh ngha s nguyn t: Mt s l nguyn t khi v ch khi n khng c cc c khng tm thng. T ta c th vit mt hm kim tra nguyn t nh sau : Function Prime(n : Integer) : Boolean; Var i : Integer; Begin Prime := False; For i := 2 to n-1 do if n mod i = 0 then Exit; Prime := True; End; Ta c th thy r thut ton trn chi ph trong trng hp xu nht ln ti O(n). Ta c th thy n rt th da vo nhn xt : Nu n l hp s th n phi c mt c nh

hn , v do ta ch cn xt cc c khng qu c m t nh sau :

ca n. Thut ton ci tin s

Function Prime(n : Integer) : Boolean; Var i : Integer; Begin Prime := False; For i := 2 to Trunc(Sqrt(n)) do if n mod i = 0 then Exit; Prime := True; End; D thy thut ton ci tin trong trng hp ti nht mt O( ), tuy nhin ta cng cn ch rng thut ton ci tin ch khc thut ton ban u khi n l s nguyn t, cn vi n l hp s th hai thut ton kt thc sau cng mt s php tnh. Ta c th c mt hng ci tin na nu nhn xt thm rng : Nu n l hp s th phi c mt c nguyn t khong t 2 n , do thay v tm c trong tt c cc s trong , , ta ch xt cc s nguyn t trong khong . Nhng khi mt

vn dc t ra l lm th no c danh sch s nguyn t khng vt qu

c th thy chi ph to danh sch s nguyn t s khng di . Tuy vy, trong trng hp phi kim tra rt nhiu s n nh th th ta c th p dng phng php trn. Trong trng hp khng c danh sch cc s nguyn t, ta c th hn ch tp tm kim bng phng php sau : Chn mt s k < n, nu UCLN(n, k) > 1 th r rng n l hp s, ngc li ta hn ch tp tm kim cc s trong khong 2 n nguyn t cng nhau vi k. Thut ton c th m t nh sau : Function Prime(n, k : Integer) : Boolean; Var List : array[1..maxk] of Integer; m phi

j, i, l : Integer;

Begin Prime := False; if Euclid(n, k) > 1 then Exit; ln {Hm Euclid ly c chung

nht ca hai s nguyn dng c mt t phn III} l := 0; for i := 1 to k-1 do if Euclid(i, k) = 1 then begin Inc(l); List[l] := i; end; for i := 2 to l do if n mod L[i] = 0 then Exit; j := k; while Sqr(j) < n do begin for i := 1 to l do if n mod (j+List[i]) = 0 then Exit; j := j + k; end; Prime := True; End;

V k rt nh nn thi gian tnh ton ch yu php tm c. Trong phn tm c, c trong k s ta ch xt l s. Ch rng y l = (k) l s cc s t nhin khng qu k v nguyn t cng nhau vi k. phc tp ca thut ton c O( ).

Theo cng thc Euler, nu k c dng phn tch tiu chun k =

pi

th (k) = k

, tc l

Do phng php chn k ti u nht l ly k bng tch ca nhng s nguyn t u tin. Nu chn k = 6 th phc tp l O( ), phc tp ca thut ton gim ng

k nu so vi O( ). Tuy nhin, ta s khng thu c mt s gim ng k hn nu chn thm s nguyn t mi.

K 6 30 210

Phn tch tiu chun 2*3 2*3*5 2*3*5*7

Trong cc hng tip cn trn, c mt nguyn tc c bn kim tra nguyn t l tm mt c khng tm thng ca n, v trong trng hp ti nht (khi n l s nguyn t), th ta phi xt ht cc s nguyn t khng qu .

Nu gi (x) l s cc s nguyn t khng vt qu x, ngi ta c kt qu ni ting sau y :

= 1.

iu ny cho thy trong trng hp n l nguyn t, s php ton khng t hn Trong thc t, nu n ln ti hng trm ch s nhng thut ton nu trn r rng khng th chy c trong thi gian cho php. Ta cng cn ch rng hin ti cha c mt thut ton tng qut cho kt qu chnh xc trong thi gian chp nhn c. 2. Thut ton xc sut

Thut ton xc xut tip cn bi ton theo hng khc, khng theo con ng tm mt c khng tm thng m da vo hai tnh cht khc ca s nguyn t. Cho p l mt s nguyn t, a l s nguyn khng chia ht cho p, ta c : ap-1 1 (mod p) (1)

a2 1 (mod p) a 1 (mod p) hoc a -1 (mod p). (2). Hai tnh cht trn kh quen thuc trong s nguyn t, ta c th chng minh khng my kh khn. Gi s p-1 = q2t trong q l mt s nguyn dng l. Theo (1) v (2), vi mi s a khng chia ht cho p ta u c : + + 1 (mod p) hoc -1 (mod p) vi mt s nguyn r no tho 0 r < t. (*)

Nh vy, mt s n l nguyn t th n phi tho mn iu kin trn vi mi 1 a n-1, ngc li nu tn ti mt a khng tho mn tnh cht trn th chc chn n khng phi l s nguyn t. Mt khc, ta c th chng minh c rng, nu n l mt hp s l > 3 th c khng qu (n-1) / 4 gi tr a trong khong 1 n n-1 tho mn (*). Do , vi mt s a chn ngu nhin trong khong 1 n n-1, th xc sut a tho mn (*) khng qu , v nu k ln chn th xc sut mi ln chn u tho mn l khng

qu . T , ngi ta a ra mt thut ton xc sut cho php kim tra mt s n c phi nguyn t hay khng trong thi gian a thc vi chnh xc rt cao. Thut ton (Rabin - Miller) c th c m t nh sau : Function Prime(n : Integer) : Boolean; Var

i, a : Integer; Begin Prime := False; Cal(n, q, t) For i := 1 to k do Begin a := Random(n-1) + 1; if MillerTest(n, a, q, t) = False then Exit; {Kim tra vi mt c s a c chn ngu nhin} End; Prime := True; End; Th tc Cal(n, q, t) phn tch n-1 = q2t vi q l s nguyn l kh n gin ta nn ta khng trnh by y. Phn quan trng nht l kim tra a c tho mn tnh cht (*) hay khng. Trc ht, ta phi tnh aq mod n, nu ta tnh bng thc hin tun t cc php nhn q ln th chi ph s rt ln (q c th t l vi n). V ta ch cn tnh lu tha modulo n nn ta c mt phng php rt hay : Phng php bnh phng lin tip. tng c bn ca n nh sau : phn tch q dnh nh phn, q s c dng tng ca cc lu tha ca 2. Ta xy dng dy {u} nh sau : u0 = a uk+1 = uk2 mod n k N. Khi , ta d dng chng minh uk = mod n. {phn tch n-1 = q2t}

Khi , aq mod n s c tnh bng tch theo modulo n ca cc uk tng ng vi cc lu tha ca 2 trong phn tch nh phn ca q. Ta c th m t bng th tc nh sau :

Function Power(a, q, n : Integer) : Integer; Var c, p2, u : Integer; Begin c := 1; u := a; p2 := 1; repeat if q and p2 <> 0 then c := (c * u) mod n; p2 := p2 shl 1; u := (u * u) mod n; until p2 > q; Power := c; End; Ta c th d dng chng minh vic tnh aq mod n bng th tc nu trn phi thc hin khng qu 2log2q ln php nhn modulo n. Do chi ph tnh ton ( php nhn v php chia mt chi ph O((logn)2) ) c O(logq(logn)2). Php kim tra iu kin (*) c th c vit nh sau : Function MillerTest(n, a, q, t : Integer) : Boolean; Var pre, c, i, j : Integer; Begin c := Power(a, q, n); pre := n-1;

for i := 0 to t do begin if c = 1 then begin MillerTest := (pre = n-1); Exit; end; pre := c; c := (c * c) mod n; end; MillerTest := False; End; Th tc MillerTest gm phn tnh aq mod n c chi ph O(logq(logn)2) v t ln thc hin tnh bnh phng modulo n c chi ph c O(t(logn)2). Ta c n-1 = q2t nn phc tp ca mt ln kim tra c s a c ch ph c O((logn)3). Thut ton thc hin k ln kim tra c chi ph O(k(logn)3), xc sut sai khng qu . Nh vy, phc tp ca thut ton tng tuyn tnh theo k, xc sut sai lm gim theo hm m vi k. Ch cn chn k khng qu ln (k 30) th xc sut sai lm qu nh, do nu n tri qua php th vi k c s a chn ngu nhin th c th khng nh gn nh chc chn n l s nguyn t. 3. Thut ton kim tra nguyn t vi s Fecmat v s Mersenne. S Fecmat Fn = . Nh ton hc Fecmat a ra gi thit Fn l s nguyn t vi mi n N. Ta c th d dng kim tra iu ny ng vi n = 0, 1, 2, 3 v 4. Tuy nhin Euler ch ra F5 l hp s v n chia ht cho 641. nh l : Fn l s nguyn t khi v ch khi -1 (mod Fn).

S Mersenne Mp = 2p - 1 . Ta c th d thy nu Mp l s nguyn t th p phi l s nguyn t. S Mersenne c ngha quan trng trong S hc v n lin quan ti s hon chnh. Mt s nguyn dng n gi l s hon chnh nu tng cc c b hn n ca n bng n. Euler chng minh n l s hon chnh chn khi v ch khi n = Mp2p-1 vi Mp l s nguyn t. nh l : Cho p l mt s nguyn t, dy {Ln} xc nh nh sau : L0 = 4 Ln+1 = Ln2 - 2 n N. Mp l s nguyn t khi v ch khi Lp-2 0 (mod Mp) .

You might also like