Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Bitnami MediaWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
0498 - NumararePIE
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
Sursa: [https://www.pbinfo.ro/probleme/498/numararepie - NumararePIE] ---- == Cerinţe == Se dă un vector cu '''n''' numere naturale. Să se determine câte dintre perechile de elemente din vector sunt prime între ele. == Date de intrare == Programul citește de la tastatură numărul '''n''', iar apoi '''n''' numere naturale, separate prin spaţii, reprezentând elementele vectorului. == Date de ieșire == Dacă datele sunt introduse corect, pe ecran se va afișa: '''"Datele sunt introduse corect."''', apoi pe un rând nou afișează pe ecran '''numărul C''', reprezentând valoarea cerută. În caz contrar, se va afișa pe ecran: '''"Datele nu corespund restricțiilor impuse."'''. == Restricţii şi precizări == * 1 ⩽ '''n''' ⩽ 200 * elementele vectorului vor fi cuprinse între '''0''' și '''1000''' == Exemple == ===Exemplul 1=== ; Intrare : 6 : 51 18 15 28 77 121 ; Ieșire : Datele sunt introduse corect. : 9 ===Explicație exemplul 1=== Perechile de elemente prime între ele sunt:<br> 51 28<br> 51 77<br> 51 121<br> 18 77<br> 18 121<br> 15 28<br> 15 77<br> 15 121<br> 28 121 ===Exemplul 2=== ; Intrare : 5 : 10 2 -3 4 5 ; Ieșire : Datele nu corespund restricțiilor impuse. <br> == Rezolvare == <syntaxhighlight lang="python" line> # 0498 def verificare_prime_intre_ele(nr1, nr2): while nr2 != 0: a = nr1 % nr2 nr1 = nr2 nr2 = a return nr1 def numarare_perechi_elem_prime_intre_ele(vector, n): C = 0 for i in range(n): for j in range(i + 1, n): if verificare_prime_intre_ele(vector[i], vector[j]) == 1: C += 1 print(C) def citire_conform_restrictiilor(vector, n): if n < 1 or n > 200: print("Datele nu corespund restricțiilor impuse.") exit() for x in vector: if x < 0 or x > 1000: print("Datele nu corespund restricțiilor impuse.") exit() if n != len(vector): print("Datele nu corespund restricțiilor impuse.") exit() print("Datele sunt introduse corect.") if __name__ == '__main__': n = int(input()) vector = list(map(int, input().split())) citire_conform_restrictiilor(vector, n) numarare_perechi_elem_prime_intre_ele(vector, n) </syntaxhighlight> == Explicație rezolvare == Programul de mai sus conține trei funcții, funcția '''verificare_prime_intre_ele(nr1, nr2)''', funcția numarare_perechi_elem_prime_intre_ele(vector, n) și funcția '''citire_conform_restrictiilor(vector, n)''', care se vor rula în interiorul main-ului ('''if __name__ == '__main__' ''', linia 34) după citirea numărului n (linia 35) și celor n numere pe care le vom pune în șirul „vector” (linia 36).<br> După ce am citit elementele, se va apela '''funcția citire_conform_restrictiilor(vector, n)''' care primește doi parametri: vectorul „vector” și lungimea sa, reprezentată de variabila „n”. Funcția verifică dacă n este între 1 și 200 (linia 21), dacă elementele vectorului sunt cuprinse între 0 și 1000 (liniile 24, 25) și dacă n este lungimea vectorului „vector” (linia 28). Dacă oricare dintre condiții este încălcată, se va afișa mesajul „Datele nu corespund restricțiilor impuse.” și se va ieși din program cu comanda exit(). Dacă toate condițiile sunt respectate, se va afișa mesajul „Datele sunt introduse corect.” (linia 31) și se va continua programul.<br> Dacă s-au introdus corect datele, se va apela funcția '''numarare_perechi_elem_prime_intre_ele(vector, n)''' care primește ca parametrii vectorul „vector” și dimensiunea sa „n”. În această funcție se inițializează o variabilă C cu 0, care va fi utilizată pentru a număra perechile de elemente consecutive din vector care sunt prime între ele, apoi se parcurge vectorul utilizând o buclă for. În interiorul primei bucle for, se adaugă o buclă for imbricată care începe de la i + 1 (următorul element din vector după elementul curent) și se termină la n-1 (ultimul element din vector). Aceasta se face pentru a verifica toate perechile de elemente consecutive posibile din vector. Pentru fiecare pereche de elemente consecutive din vector, se apelează '''funcția verificare_prime_intre_ele(nr1, nr2)''' pentru a verifica dacă acestea sunt prime între ele. Funcția '''verificare_prime_intre_ele(nr1, nr2)''' calculează cel mai mare divizor comun al celor două numere folosind algoritmul lui Euclid (care începe prin a calcula restul împărțirii nr1 la nr2 și se atribuie rezultatul într-o variabilă a (adesea denumită și "restul"), apoi se actualizează valorile celor două numere astfel: nr1 devine nr2 și nr2 devine a. și se repetă acești pași până când a devine 0, și vom avea în final CMMD al celor două numere) și returnează rezultatul. Dacă rezultatul returnat de această funcție este 1 (adică cele două numere nu au niciun divizor comun în afara valorii 1), atunci se consideră că cele două numere sunt prime între ele.<br>-> dacă cele două numere consecutive din vector sunt prime între ele, atunci variabila C este incrementată cu 1;<br>-> la finalul buclei imbricate, se va obține numărul total de perechi de elemente consecutive din vector care sunt prime între ele, stocat în variabila C, pe care o afișăm, ea fiind valoarea cerută în problemă.
Summary:
Please note that all contributions to Bitnami MediaWiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Bitnami MediaWiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Toggle limited content width