2312 - GuIT: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
 
(One intermediate revision by one other user not shown)
Line 61: Line 61:
</syntaxhighlight>
</syntaxhighlight>
==Explicație rezolvare==
==Explicație rezolvare==
Acest cod implementează o funcție numită "print_num" care primește două argumente "n" și "k". Funcția calculează suma tuturor divizorilor primi ai lui "n" care sunt mai mici sau egali cu "k".
Acesta este un cod Python care primește două numere, verifică dacă acestea sunt valide și apoi calculează suma factorilor primi ai primului număr care apar de cel puțin a doua valoare dată. Dacă numerele introduse sunt valide, codul va afișa suma factorilor primi, altfel va afișa un mesaj de eroare.
 
Mai întâi, codul validează datele de intrare prin intermediul a două funcții separate, "validare_date_numar" și "validare_date", care se asigură că "n" și "k" sunt în limitele specificate (1 <= n <= 1000000 și 1 <= k <= 1000).
 
Apoi, în interiorul funcției "print_num", se inițializează o variabilă "s" la 0 și se stabilește o variabilă "d" la 2. Se utilizează un buclă while care rulează până când "n" devine mai mic sau egal cu 1.
 
În interiorul buclei while, se verifică dacă "n" este divizibil cu "d". Dacă este, se împarte "n" la "d" și se adaugă "d" la suma "s". Se continuă acest proces până când "n" nu mai este divizibil cu "d". Apoi, variabila "d" este incrementată cu 1 și se verifică dacă "d" la pătrat este mai mare decât "n". Dacă este, se atribuie lui "d" valoarea "n", în caz contrar, bucla continuă.
 
La final, funcția returnează suma divizorilor primi ai lui "n" care sunt mai mici sau egali cu "k".
 
În blocul "if name == 'main'", se verifică dacă datele de intrare sunt valide folosind cele două funcții de validare și se afișează un mesaj corespunzător. Dacă datele de intrare sunt valide, se calculează suma divizorilor primi ai lui "n" și se afișează rezultatul. În caz contrar, se afișează un mesaj de eroare.

Latest revision as of 10:57, 11 April 2023

Cerinţa[edit | edit source]

Ghiţă s-a hotărât să plece de-acasă de Ignat, având nişte previziuni sumbre. Neavând bani, s-a gândit să-şi scoată un single de sezon, “guIT”. Din vânzarea lui a obţinut frumoasa sumă de n dolari.Pentru a câştiga un meniu vegetarian de Crăciun, trebuie să aflaţi suma numerelor prime din descompunerea lui n, ştiind că n este produs de trei numere prime distincte.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n.

Date de ieşire[edit | edit source]

Programul va afișa pe ecran numărul S, reprezentând suma celor trei numere prime din descompunerea lui n.

Restricții și precizări[edit | edit source]

  • 1 ≤ n ≤ 10^12

Exemplu[edit | edit source]

Intrare
105
Ieșire
15

Explicație[edit | edit source]

105 = 3•5•7, deci suma este 3+5+7=15.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> import math

def validare_date_numar(n):

   if 1 <= int(n) <= 1000000:
       return True
   else:
       return False

def validare_date(k):

   if 1 <= int(k) <= 1000:
       return True
   else:
       return False

def print_num(n, k):

   s = 0
   d = 2
   while n > 1:
       p = 0
       while n % d == 0:
           n //= d
           p += 1
       if p > 0:
           s += d
       d += 1
       if d * d > n:
           d = n
   return s

if __name__ == '__main__':

   n = input()
   k = input()
   if validare_date_numar(n) and validare_date(k):
       print("\nDatele de intrare corespund restricțiilor impuse.\n")
       numar = print_num(int(n), int(k))
       print(numar)
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.")


</syntaxhighlight>

Explicație rezolvare[edit | edit source]

Acesta este un cod Python care primește două numere, verifică dacă acestea sunt valide și apoi calculează suma factorilor primi ai primului număr care apar de cel puțin a doua valoare dată. Dacă numerele introduse sunt valide, codul va afișa suma factorilor primi, altfel va afișa un mesaj de eroare.