3352 - Factori 1: Difference between revisions
Paul Matei (talk | contribs) Pagină nouă: == Cerinţa == Se dau două numere naturale. Afișați numărul pentru care suma factorilor primi distincți este mai mare. Dacă cele două numere au aceași sumă a factorilor primi, afișați-l pe cel mai mic. == Date de intrare == Programul citește de la tastatură două numere naturale. == Date de ieşire == Programul va afișa pe ecran numărul cerut. == Restricții și precizări == *cele două numere citite vor fi mai mici decât '''1.000.000.000''' == Exemplu == ; I... |
Paul Matei (talk | contribs) No edit summary |
||
Line 58: | Line 58: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==Explicație rezolvare== | ==Explicație rezolvare== | ||
Acest | Acest program primește de la utilizator două numere întregi și verifică dacă acestea îndeplinesc anumite condiții. Dacă numerele sunt valabile, programul afișează numărul dintre cele două care are suma cifrelor factorilor primi mai mare. Dacă suma este aceeași pentru ambele numere, programul va afișa cel mai mic dintre cele două numere. Dacă cele două numere nu sunt valabile, programul afișează un mesaj de eroare. | ||
Revision as of 11:00, 11 April 2023
Cerinţa
Se dau două numere naturale. Afișați numărul pentru care suma factorilor primi distincți este mai mare. Dacă cele două numere au aceași sumă a factorilor primi, afișați-l pe cel mai mic.
Date de intrare
Programul citește de la tastatură două numere naturale.
Date de ieşire
Programul va afișa pe ecran numărul cerut.
Restricții și precizări
- cele două numere citite vor fi mai mici decât 1.000.000.000
Exemplu
- Intrare
- 36 26
- Ieșire
- 26
Explicație
Factorii primi ai lui 36 sunt 2 și 3, cu suma 5. Factorii primi ai lui 26 sunt 2 și 13, cu suma 15. Rezultatul este 26, pentru că are suma factorilor primi mai mare.
Rezolvare
<syntaxhighlight lang="python" line> import math
def prim(x):
d = 2 cnt = 0 while x > 1: p = 0 while x % d == 0: p += 1 x //= d if p: cnt += d d += 1 if d * d > x: d = x return cnt
def validate_input(x, y):
if x < 0 or y < 0: return False if x == 0 and y == 0: return False return True
if __name__ == '__main__':
x, y = map(int, input().split()) if validate_input(x, y): print("\nDatele de intrare corespund restricțiilor impuse.\n") if prim(x) > prim(y): print(x) elif prim(x) < prim(y): print(y) else: print(min(x, y)) else: print("Datele de intrare nu corespund restricțiilor impuse.")
</syntaxhighlight>
Explicație rezolvare
Acest program primește de la utilizator două numere întregi și verifică dacă acestea îndeplinesc anumite condiții. Dacă numerele sunt valabile, programul afișează numărul dintre cele două care are suma cifrelor factorilor primi mai mare. Dacă suma este aceeași pentru ambele numere, programul va afișa cel mai mic dintre cele două numere. Dacă cele două numere nu sunt valabile, programul afișează un mesaj de eroare.