Sunteți pe pagina 1din 18

Numere speciale

!
!
!
!
!
!
!
!
!
!
!

Capitolul

Numere perfecte
Numere prietene
Numere triangulare
Numere ptratice
Numere piramidale
Numere pitagoreice
Numere prime
Numere Fibonacci
Implementri sugerate
Probleme propuse
Soluiile problemelor

n antichitate numerele erau apreciate, n primul rnd, pentru calitile lor i, abia dup
aceea, pentru cantitatea pe care o reprezint. Astfel, fiecare numr a fost privit ca o individualitate distinct. Rudolf Steiner ne explic teoria conform creia un numr se
poate obine din ntreg printr-un proces de mprire (diviziune) asemntor proceselor
naturale de diviziune celular. Cellalt procedeu de obinere a unui numr ar fi prin
adunare. Cele dou procedee se pot prezenta comparativ astfel:
Operaie de mprire

Operaie de adunare

Unitatea se considera mama tuturor numerelor, fiind superioar oricrui numr.


Numerele se caracterizau prin dependena lor fa de alte numere cu care formeaz o
nlnuire. De exemplu: numrul 6 s-ar putea reprezenta astfel:

4. Numere speciale

85

Exist multe motive pentru care cercul reprezint o imagine mai adecvat unui numr care se divizeaz n pri. n acest caz, numrul 6 s-ar putea reprezenta astfel:
1

2
1

2
1

Unitatea din numrul 6 se regsete, de asemenea, ca unitate n numerele doi i trei


(divizori ai lui 6), pe cnd unitatea din 5 se regsete doar pentru sine nsui, cci cinci
nu este multiplul nici unuia dintre numerele care l preced.

Dac l privim aa, cinci poate fi numit primul numr, numr prim cum l numim noi. Aceeai denumire le este apoi atribuit i celorlalte numere care nu au ali divizori dect pe 1 i pe ei nii.
Analiznd numrul 6, observm c adunnd divizorii si (numerele 1, 2 i 3) ajungem din nou la numrul 6 (1 + 2 + 3 = 6).

4.1. Numere perfecte


Vechii greci aveau un respect deosebit pentru aceste numere i le numeau arithmos
teleios adic numrul limitat la el nsui, n traducerea actual numr perfect.
Se spune c Euclid ar fi artat c dac 2n 1 este numr prim, atunci 2n 1(2n 1)
este numr perfect. Pn n prezent nu s-a gsit nici un numr perfect care s nu verifice condiia lui Euclid.
n
2
3
4
5

2n 1
22 1 = 3
23 1 = 7
24 1 = 15
25 1 = 31

Primalitate
prim
prim
nu
prim

6
7

26 1 = 63
27 1 = 127

nu
prim

2n 1 (2n 1)
21 3 = 2 3 = 6
22 7 = 4 7 = 28

Suma divizorilor
1+2+3=6
1 + 2 + 4 + 7 + 14 = 28

24 31 = 16 31 = 496

1 + 2 + 4 + 8 + 16 + 31 +
+ 62 + 124 + 248 = 496

26 127 = 16 31 =
8128

1 + 2 + 4 + 8 + 16 + 32 +
+ 64 + 127 + 254 + 508 +
1016 + 2032 + 4064 = 8128

86

4. Numere speciale
Alte proprieti ale numerelor perfecte :
1) Toate numerele perfecte se termin cu cifra 6 sau cu cifra 8, dup cum se poate observa din tabelul urmtor:
n 2n 1 2n 1 2n 1(2n 1)
2
2
3
6
3
4
7
28
4
8
15
120
5
16
31
496
6
32
63
2016
7
64
127
8128
8 128
255
32640
9 256
511
130816
10 512 1023
523776
11 1024 2047
2096128
12 2048 4095
8386560
Numerele de forma 2n 1 se numesc numere Mersenne.
2) Primele patru numere perfecte n reprezentare binar sunt:
Numere perfecte Reprezentare binar
6
110
28
11100
496
11110000
8128
111111000000

Dac facem o comparaie ntre un numr i suma divizorilor si, observm c avem
trei situaii:
Dac suma divizorilor este egal cu numrul, spunem c numrul este perfect.
Dac suma divizorilor este mai mic dect numrul, spunem c numrul este deficient.
Dac suma divizorilor este mai mare dect numrul, spunem c numrul este bogat.

4.2. Numere prietene


Perechile de numere care se acoper reciproc, se bucurau de un mare interes n vechea Grecie i erau numite philoi arithmoi adic numere prietene (n unele surse le
gsim cu numele de numere amiabile). Aici prin acoperire nelegem proprietatea c
fiecare dintre cele dou numere are suma divizorilor egal cu cellalt numr.

4. Numere speciale

87

Prima pereche de numere prietene este 220 cu 284. Suma divizorilor lui 220 este 1
+ 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284, iar suma divizorilor lui 284
este 1 + 2 + 4 + 71 + 142 = 220.
Matematicianul arab Tabit ibn Korra (secolul X) a gsit un algoritm de generare a
unor perechi de numere prietene. Acest algoritm a fost publicat fr demonstraie de
ctre Descartes n anul 1638.
Prezentm n continuare algoritmul (reeta) lui Tabit n forma n care se cunotea
n acele vremuri.
Pasul 1: Se pleac de la numrul 6;
Pasul 2: Se construiete, prin dublri succesive irul: 6, 12, 24, 48, 96, 192, ...
Pasul 3: n continuare se iau pe rnd din acest ir perechi succesive. Exemplu: 6 i 12,
12 i 24, 24 i 48,
Pasul 4: Fiecrei perechi de numere i se adaug un al treilea numr, care conine ambii
membri ai dualitii, adic produsul lor. Se obin astfel:
(6, 12); (12, 24); (24, 48); (48, 96);
72
288
1152
4608
Pasul 5: Se scade 1 din fiecare din cele trei numere. Se obine:
(5, 11); (11, 23); (23, 47), (47, 95);
71
287
1151
4607
Pasul 6: Se construiete seria dublurilor pentru numrul 4 (4, 8, 16, 32, 64, ...) care se
scrie sub numerele obinute la pasul anterior.
(5, 11); (11, 23); (23, 47), (47, 95);
71
287
1151
4607
4
8
16
32
Pasul 7: ncepnd cu acest pas ne intereseaz numai tripletele de numere prime. n cazul nostru se pstreaz:
(5, 11); (23, 47); ...
71
1151
4
16
Pasul 8: La acest pas, se nmulesc cele dou numere ale perechii i se obine:
55, 1081, ...
71, 1151
Pasul 9: n final, cele dou numere scrise deasupra multiplilor lui 4 se nmulesc cu
multiplul corespunztor. Se obin astfel perechi de numere prietene:
220, 17296, ...
284, 18416, ...
Observaie
Algoritmul lui Tabit nu genereaz toate perechile de numere prietene. El a gsit
doar o regul de a genera anumite numere perfecte.
n continuare prezentm alte numere crora anticii le acordau o deosebit atenie.

88

4. Numere speciale

4.3. Numere triangulare


1
1

3
= 6
4

= 10

Un numr x se numete triangular dac exist un numr natural n, astfel nct suma primelor n numere naturale este egal cu numrul dat x:
1 + 2 + 3 + + n = n (n + 1)/2 = x

4.3.1. Relaii ntre numerele perfecte i cele triangulare


Dac se privete irul numerelor triangulare : 1, 3, 6, 10, 15, 21, 28, 36, ... se observ
c n ir apar numerele perfecte 6 i 28. Este uor de demonstrat c orice numr perfect
este totodat i numr triangular. Lsm pe seama cititorilor verificarea acestei
observaii, innd cont de ipoteza c orice numr perfect are forma 2n 1(2n 1).

4.4. Numere ptratice


Un numr x se numete ptratic dac exist un numr natural n, astfel nct numrul
dat x s fie egal cu suma primelor n numere naturale impare:
1 + 3 + 5 + + (2n 1) = n2

4.5. Numere piramidale


Un numr se numete piramidal dac poate fi scris ca sum de numere triangulare
consecutive:
1
1+3=4
1 + 3 + 6 = 10
...

4.6. Numere pitagoreice


Relaia caracteristic laturilor unui triunghi dreptunghic (cunoscut empiric i de egipteni) este:
x2 + y2 = z2
Numerele care respect o astfel de relaie se numesc numere pitagoreice.

4. Numere speciale

89

4.7. Numere prime


Un numr prim are exact doi divizori. Rezult imediat c 1 nu este prim i singurul
numr prim par este 2. Verificarea primalitii se poate realiza simplu, pornind de la
definiie, dar se pot scrie i algoritmi mai performani care se vor opri imediat dup ce
s-a gsit un divizor propriu. De asemenea, putem evita cutarea unor divizori care sunt
numere pare n cazul n care numrul dat este impar (vezi rezolvarea problemei
4.10.7).
Generarea numerelor prime mai mici dect un numr dat i-a preocupat i pe matematicienii din Grecia antic. Strategia lui Eratostene i astzi este un algoritm aplicat. El a scris pe un papirus, ncepnd de la 2, un ir de numere naturale consecutive.
Apoi, l-a marcat pe 2 ca fiind prim i a tiat toate numerele divizibile cu 2. A procedat
la fel cu 3. Pe 4 nu l-a mai gsit printre numere, acesta fiind tiat, deci a continuat
cu 5. n final, pe papirus au rmas netiate doar numerele prime.

4.8. Numere Fibonacci


irul numerelor care poart numele celebrului matematician Fibonacci are foarte multe proprieti interesante:
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
Generarea termenilor mai mici sau egali cu un numr natural n > 1 dat ai acestui ir
este o problem simpl i se realizeaz cu urmtorul algoritm.
Algoritm Fibonacci:
citete n
a 1
b 1
c a + b
scrie a, b
ct timp c n execut:
scrie c
a b
b c
c a + b
sfrit ct timp
sfrit algoritm

{ valoarea cea mai mare a unui termen }


{ primul termen }
{ al doilea termen }
{ al treilea termen }
{ deoarece n >1, primii doi se pot scrie }
{ ct timp suma celor doi termeni anteriori }
{ satisface cerina, o scriem }
{ noul a va fi vechiul b }
{ noul b va fi vechiul c }
{ calculm noul termen }

O problem interesant care se poate formula este urmtoarea: dat fiind un numr
natural, s se stabileasc dac acesta este sau nu numr Fibonacci i, n caz negativ, s
se scrie numrul sub form de sum de numr minim de numere Fibonacci.

90

4. Numere speciale

Vom genera, cu algoritmul de mai sus, numere Fibonacci i ne vom opri n momentul n care ultimul termen este mai mare sau egal cu numrul dat. Dac ultima valoare a variabilei c este numr Fibonacci, algoritmul se termin. n caz contrar, afim
cel mai mare numr Fibonacci mai mic sau egal cu numrul dat (disponibil n variabila b) i scdem din numrul dat valoarea acestuia. Dac b a fost egal cu numrul dat,
algoritmul se termin, n caz contrar relum algoritmul de verificare. Ct timp n (din
care mereu se scade numrul Fibonacci b care se afieaz) este pozitiv, determinm
cte un numr Fibonacci b mai mic sau egal cu valoarea actual a lui n, pe care o scdem din n i o afim.
Algoritm Sum_de_Numere_Fibonacci:
citete n
{ valoarea dat }
a 1
b 1
c a + b
ct timp c < n execut:
a b
b c
c a + b
sfrit ct timp
{ acum b este cel mai mare numr Fibonacci n }
dac c = n atunci
scrie 'Numar Fibonacci'
altfel
scrie n,'=',b
n n - b
ct timp n > 0 execut:
{ ct timp mai avem rest }
ct timp b > n execut:
c b
b a
a c - b
sfrit ct timp
{ acum b este cel mai mare numr Fibonacci n }
scrie '+',b
n n - b
sfrit ct timp
sfrit dac
sfrit algoritm

4. Numere speciale

91

4.9. Implementri sugerate


Pentru a v familiariza cu modul n care se rezolv problemele n care verificarea divizibilitii are rol important, v sugerm s ncercai s implementai algoritmi pentru:
1. numrarea (generarea) divizorilor unui numr;
2. descompunerea unui numr n factori primi;
3. determinarea factorului prim al unui numr dat, care este la puterea cea mai mare;
4. cel mai mare divizor comun a dou numere ntregi;
5. cel mai mic multiplu comun a dou numere ntregi;
6. verificarea primalitii unui numr;
7. determinarea celui mai mic numr prim mai mare dect un numr dat;
8. determinarea celui mai mare numr prim mai mic dect un numr dat;
9. determinarea prefixelor prime ale unui numr;
10. determinarea sufixelor prime ale unui numr;
11. determinarea primelor n numere prime;
12. determinarea tuturor numerelor prime dintr-un interval;
13. determinarea primelor n numere perfecte;
14. determinarea primelor n numere perfecte folosind ideea lui Euclid;
15. determinarea primelor n perechi de numere prietene;
16. generarea perechilor de numere prietene, folosind algoritmul lui Tabit ibn Korra;
17. afiarea numerelor triangulare dintr-un ir de numere naturale;
18. afiarea numerelor triangulare care sunt ptrate perfecte i sunt mai mici sau egale
cu un numr natural n dat;
19. afiarea numerelor ptratice dintr-un ir dat de numere naturale;
20. afiarea numerelor ptratice care sunt ptrate perfecte i sunt mai mici sau egale
cu un numr natural n dat;
21. generarea primelor n perechi de numere pitagoreice;
22. generarea termenilor irului Fibonacci mai mici dect un numr natural dat;
23. generarea primilor n termeni ai irului Fibonacci;
24. scrierea unui numr natural n sub form de sum de numere Fibonacci.

4.10. Probleme propuse


4.10.1. Divizori
S se scrie un program care determin cel mai mic numr care are exact k divizori,
unde k este un numr natural dat.
Date de intrare
Numrul natural k se citete din fiierul de intrare NUMAR.IN.

92

4. Numere speciale

Date de ieire
Primul numr natural avnd exact k divizori se va scrie n fiierul NUMAR.OUT.
Restricii i precizri
2 k 100
Exemplu
NUMAR.IN
4

NUMAR.OUT
6

Timp maxim de execuie: 2 secunde

4.10.2. Numere perfecte


S se genereze toate numerele perfecte posibile de reprezentat cu un numr de tip ntreg pe dou cuvinte. Implementai algoritmul sugerat de Euclid pentru obinerea numerelor perfecte.
Date de ieire
Numerele perfecte mai mici dect cel mai mare numr ntreg posibil de reprezentat se
vor scrie n fiierul PERFECT.OUT.

4.10.3. Numere prietene


S se genereze perechi de numere prietene, posibile de reprezentat cu numere de tip
ntreg pe dou cuvinte. Implementai algoritmul lui Tabit.
Date de ieire
Perechile de numere prietene se vor scrie pe cte o linie a fiierului PRIETENE.OUT.

4.10.4. Numere triangulare


Se consider mai multe numere naturale scrise ntr-un fiier. S se copieze ntr-un alt
fiier toate numerele triangulare i ntr-un al treilea acelea care nu sunt triangulare.
Date de intrare
Numerele naturale se vor citi de pe prima linie a fiierului TRI.IN.
Date de ieire
Numerele citite din fiierul de intrare care sunt triangulare se vor scrie pe prima linie a
fiierului TRI.OUT (desprite prin cte un spaiu), iar cele care nu sunt triangulare se
vor scrie pe prima linie a fiierului REST.OUT.

4. Numere speciale

93

Restricii i precizri
1 orice numr dat 1000000000;
dup ultimul numr existent n fiier urmeaz imediat marcajul de sfrit de fiier.
Exemplu
TRI.IN
22 3 55 6 10 11

TRI.OUT
3 55 6 10

REST.OUT
22 11

4.10.5. Aplicaie la numerele triangulare


Se consider irul de numere: 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5,
S se calculeze valoarea celui de-al k-lea element din ir (k numr natural dat) fr
s se genereze irul de elemente.
Date de intrare
Numrul natural k se citete din fiierul de intrare SIR.IN.
Date de ieire
Valoarea corespunztoare celui de-al k-lea element din ir se va scrie n fiierul de
ieire SIR.OUT.
Restricii i precizri
1 k 1000000000.
Exemplu
SIR.IN
14

SIR.OUT
5

4.10.6. Alte numere speciale


Notm cu nkc (k = 1, 2, ..., 9, c {2, 3, ..., 9}) numerele naturale formate din c cifre
identice i egale cu k. Notm suma cifrelor: sk = c k. Se tie c exist mai multe numere nr, astfel nct se poate gsi o valoare c pentru care:
sk nr = nkc , k = 1, 2, ..., 9.
S se scrie un program care determin toate perechile (nr, c) avnd proprietatea descris.
Date de ieire
Pe fiecare linie a fiierului de ieire NUMAR.OUT se vor scrie dou numere naturale, separate printr-un spaiu, reprezentnd numrul nr i numrul c de cifre identice pentru
care proprietatea cerut este adevrat.

94

4. Numere speciale

4.10.7. Prim
Stabilii dac un numr dat este prim sau nu!
Date de intrare
n fiierul de intrare PRIM.IN este scris un singur numr natural.
Date de ieire
Dac numrul citit din fiierul de intrare este prim, n fiierul de ieire PRIM.OUT se
va scrie DA, altfel se va scrie NU.
Exemplu
PRIM.IN
2

PRIM.OUT
DA

4.11. Soluiile problemelor propuse


4.11.1. Divizori
Pentru a analiza modul de rezolvare a acestei probleme, vom proiecta algoritmul pentru un exemplu. Fie k = 4. Vom determina divizorii numerelor naturale, ncepnd cu 2,
i terminnd n momentul n care am gsit primul numr care are exact k divizori.
Exemplu
4 are 3 divizori (1, 2 i 4);
5 are 2 divizori (1, 5);
6 are 4 divizori (1, 2, 3 i 6), deci ne oprim. Numrul cutat este 6.
Analiznd exemplul dat, aa pare c divizorii sunt numere prime, dar trebuie s fim
ateni. De exemplu, numrul 840 are 32 de divizori: 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 15,
20, 21, 24, 30, 35, ..., deci printre divizori avem numere prime i puteri ale lor, respectiv produse de dou sau mai multe numere prime.
n descrierea urmtorului algoritm notm cu nr numrul natural curent, cu divizor
valoarea cu care efectum mprirea i cu nr_d numrul divizorilor lui nr. Acest algoritm genereaz numere naturale i, ncepnd cu numrul 2, determin toi divizorii
acestora, numrndu-le. Generarea numerelor se oprete n momentul n care s-a gsit
primul numr avnd k divizori. Dac ns nu suntem ateni i nu cutm posibiliti de
optimizare, programul nostru va rula pentru k = 100 mult mai mult timp dect permite
restricia privind timpul de execuie.

4. Numere speciale

95

n concluzie, vom cuta divizori pn la rdcina ptrat a numrului, deoarece,


chiar dac exist divizori mai mari dect aceast valoare, acetia sunt egali cu ctul
mpririi ntregi ai unui divizor mai mic dect rdcina ptrat. n concluzie, pentru
fiecare divizor gsit mrim contorul divizorilor cu 2 (odat pentru divizorul divizor
i nc odat pentru divizorul [nr/divizor]). S observm c dac numrul este ptrat perfect, divizorul divizor este egal cu divizorul [nr/divizor], deci n cazul
numerelor care sunt ptrate perfecte, n final vom micora cu 1 numrul divizorilor
contorizai.
Algoritm Divizori:
citete k
nr 1
repet
nr nr + 1
{ dac k = 2, atunci cel mai mic numr cu 2 divizori este 2 }
nr_d 2
{ orice numr are doi divizori proprii }
pentru divizor=2,parte ntreag din rdcina ptrat a lui n execut:
dac rest[nr/divizor] = 0 atunci
{ numrm divizorii lui nr }
nr_d nr_d + 2
sfrit dac
sfrit pentru
dac nr este ptrat perfect atunci
nr_d nr_d - 1
{ pn cnd obinem k divizori }
pn cnd nr_d = k
scrie nr
sfrit algoritm

4.11.2. Numere perfecte


n enunul problemei ni se cere s generm toate numerele perfecte mai mici dect un
numr dat n. Dup cum s-a sugerat n enun, vom folosi condiia necesar enunat de
ctre Euclid, prezentat anterior.
Condiia spune c dac numrul 2m 1 este prim, atunci numrul 2m 1(2m 1) este
perfect.
Astfel, cel mai simplu procedeu este de a da pe rnd valori lui m i, n cazul n care
numrul 2m 1 este prim, de a afia numrul perfect 2m 1(2m 1).
Algoritm Generare_Numere_Perfecte:
citete n
actual 2
{ prima putere a lui 2 }
repet
{ 2 la puterea m }
actual actual*2
{ verificm dac actual 1 este prim }
prim adevrat

96

4. Numere speciale

pentru divizor=2,parte ntreag din rdcina ptrat a lui actual-1


execut:
dac rest[(actual-1)/divizor] = 0 atunci
prim fals
ieire forat din pentru
sfrit dac
sfrit pentru
dac prim atunci
depire fals
{ ne ferim de o nmulire care ar provoca depire }
dac calcularea valorii [actual/2]*(actual-1) ar produce depire
atunci
depire adevrat
altfel
scrie [actual/2]*(actual-1)
sfrit dac
pn cnd depire
sfrit algoritm

4.11.3. Numere prietene


Ni se cere implementarea unui algoritm descris i exemplificat. Acest algoritm genereaz unele perechi de numere prietene conform unui model descris de Tabit.
n algoritm am notat cele dou numere din perechea curent cu a i cu b (multipli
lui 6) i cu prod produsul lor. Variabilele logice prima, primb i primprod pstreaz
valoarea de adevr privind primalitatea numerelor a 1, b 1 i prod 1. Cu coef s-a
notat valoarea curent a multiplilor lui 4 prin nmulire cu 2. Descrierea algoritmului
n pseudocod este urmtorul:
Algoritm Generare_Perechi_De_Numere_Prietene;
coef 2 { valoare iniial pentru dublii lui 4; i vom obine prin nmulire cu 2 }
a 6
{ primul numr din prima pereche }
{ valoare iniial necesar la primul pas }
prima adevrat
depire fals
repet

{ primul numr n perechea curent este al doilea numr din perechea precedent }
b a
a b*2

{ al doilea numr n perechea curent este dublul precedentului }


{ primalitatea celui de-al doilea numr din perechea precedent }

primb prima
dac a*b ar produce depire atunci
depire adevrat

{ ne ferim de o posibil depire }

4. Numere speciale

97

altfel
{ efectum produsul, deoarece nu vom avea depire }
prod a*b
sfrit dac
{ ne pregtim s stabilim primalitatea lui a }
prima adevrat
{ i a lui prod }
primprod adevrat
divizor 2
ct timp prima i (divizor rdcina ptrat a lui prod-1) execut:
dac rest[(a-1)/divizor] = 0 atunci
prima fals
sfrit dac
dac rest[(prod-1)/divizor] = 0 atunci
primprod fals
sfrit dac
divizor divizor + 1
sfrit ct timp
coef 2*coef
{ pregtim urmtorul multiplu al lui 4 prin dublare }

{ dac a 1, b 1 (perechea) i prod 1 sunt numere prime }


dac prima i primb i primprod atunci
scrie (a-1)*(b-1)*coef,' ',(prod-1)*coef
pn cnd depire
sfrit algoritm

4.11.4. Numere triangulare


Cerina la aceast problem este s se elimine numerele triangulare dintr-un ir de numere date. Reamintim c un numr se numete triangular dac se poate obine prin nsumarea unui numr de numere naturale consecutive, ncepnd cu numrul 1.
Algoritmul de rezolvare prezentat n continuare verific pe rnd dac numerele din
fiier sunt triangulare, scriind n fiierul rezultat acele numere care nu verific aceast
proprietate.
Algoritm Triangulare:
ct timp nu urmeaz marca de sfrit de fiier execut:
citete x
suma 0
{ verificm dac x este triangular }
n1
{ primul numr natural n sum }
repet
suma suma + n
nn + 1
{ crete valoarea termenului }
pn cnd x suma
dac x suma atunci
{ dac x nu este triangular, l copiem n REST.OUT }
scrie x

98

4. Numere speciale

altfel
scrie x
sfrit dac
sfrit ct timp
sfrit algoritm

{ dac x este triangular, l copiem n TRI.OUT }

4.11.5. Aplicaie la numerele triangulare


Pentru a nelege mai bine aceast problem, se urmrim n tabelul de mai jos modul
de construire a irului dat.
k

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Elementele irului

1 2 2 3 3 3 4 4 4 4

Numr triangular = 3

1+2=3

Numr triangular = 6

1+2+3=6

Numr triangular = 10 1 + 2 + 3 + 4 = 10
...
3

10

15 ...

Studiind tabelul de mai sus putem trage cteva concluzii:


Observm c pentru un numr de ordine k valoarea elementului poate fi determinat prin calcularea numrului triangular cel mai apropiat de k.
Valoarea cutat va fi egal cu ultimul numr natural pe care l-am adugat numrului triangular.
Aplicnd observaiile de mai sus algoritmul este urmtorul (v recomandm s realizai o rezolvare a acestei probleme folosind suma primelor n numere naturale).
Algoritm Problema5:
citete k
i 1
TRI 1
ct timp TRI < k execut
i i + 1
TRI TRI + i
sfrit ct timp
scrie i
sfrit algoritm

4. Numere speciale

99

4.11.6. Alte numere speciale


Un exemplu de numr care ndeplinete aceast proprietate este 37:
(1 + 1 + 1) 37 = 111
(2 + 2 + 2) 37 = 222
(3 + 3 + 3) 37 = 333
(4 + 4 + 4) 37 = 444
(5 + 5 + 5) 37 = 555
(6 + 6 + 6) 37 = 666
(7 + 7 + 7) 37 = 777
(8 + 8 + 8) 37 = 888
(9 + 9 + 9) 37 = 999
Algoritmul sugerat va cuta pentru fiecare lungime c de la 2 la 9 numrul care ndeplinete proprietatea cerut pentru orice numr avnd cifre identice pe lungimea c.
Secretul const n a observa c numrul cutat este de fapt un ct comun n cazul celor
9 numere mprite la rndul lor la suma cifrelor corespunztoare.
Am notat variabilele avnd semnificaiile din enun, vechi reprezint valoarea nr,
obinut la pasul precedent.
Algoritm Speciale:
pentru c=2,9 execut:
{ numere de lungimi cuprinse ntre 2 i 9 }
ok adevrat
k 1
{ construim numrul din c cifre }
ct timp (k 9) i ok execut:
numr 0
{ construim numrul din c cifre }
pentru i=1,c execut:
numr numr*10 + k
sfrit pentru
s c*k
dac rest[numr/s]=0 atunci

{ numrul cutat trebuie s fie ctul ntreg dintre numrul format }


nr [numr/s]
{ din c cifre identice i suma celor c cifre }
dac k > 1 atunci
{ dac k = 1, nc nu avem vechi }
dac nr = vechi atunci
ok adevrat
{ dac am obinut acelai numr, vom continua }
altfel
ok fals
sfrit dac
sfrit dac
vechi nr
k k + 1

100

4. Numere speciale

altfel
ok fals
sfrit dac
dac ok atunci
scrie nr,c
sfrit dac
sfrit ct timp
sfrit pentru
sfrit algoritm

4.11.7. Prim
ntr-o prim abordare, pornim de la definiia numrului prim (un numr prim are exact
doi divizori: 1 i el nsui). n concluzie, vom verifica dac numrul dat are vreun divizor printre numerele 2, 3, ..., n 1.
Algoritm Prim1:
citete nr
{ numrul de verificat}
{ primul divizor diferit de 1 }
diviz 2
ct timp (diviz nr-1) i (rest[nr/diviz] 0) execut:
diviz diviz + 1
sfrit ct timp
dac diviz > nr-1 atunci { dac nu am gsit nici un divizor mai mic dect }
prim adevrat
{ nr1 numrul este prim, n caz contrar nu este }
altfel
prim fals
sfrit dac

afiare
sfrit algoritm

Algoritmul poate fi mbuntit considerabil dac tratm separat cazul acelor numere care nu necesit nici o mprire pentru stabilirea proprietii. Acestea sunt numrul
1 i numerele pare. n rest, proprietatea de divizibilitate o vom verifica doar cu numere
impare, tiind c un numr impar nu poate avea nici un divizor par. n plus, nu vom
genera divizori mai mari dect rdcina ptrat a numrului, deoarece divizorii mai
mari au fost gsii, dac exist, sub forma unui ct al mpririi numrului cu un divizor mai mic.
Algoritm Prim2:
citete nr
dac nr = 1 atunci
prim fals

{ 1 nu este prim }

4. Numere speciale

101

altfel
dac nr este numr par atunci
{ numere pare }
prim nr=2
{ singurul numr par prim este 2 }
altfel
{ numere impare }
{ primul divizor posibil al unui numr impar }
diviz 3
rad parte ntreag din rdcina ptrat a lui nr

{ calculm radicalul o singur dat n afara structurii repetitive }


prim adevrat
{ presupunem c numrul este prim }
ct timp (diviz rad) i prim execut:
dac rest[nr/diviz]=0 atunci
{ am gsit un divizor, deci nr nu este prim }
prim fals
altfel
diviz diviz + 2

{ un numr impar se poate divide doar cu numere impare }


sfrit dac
sfrit ct timp
sfrit dac
sfrit dac

afiare
sfrit algoritm

S-ar putea să vă placă și