2104 - Factorial 3: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
==Cerința== | ==Cerința== | ||
Factorialul unui număr natural nenul <code>n</code>, notat <code>n!</code>, se defineşte ca fiind produsul numerelor naturale de la <code>1</code> la <code>n</code>. Una dintre modalităţile de reprezentare a factorialului este prin enumerarea factorilor primi pe care îi conţine şi a exponenţilor acestora. | Factorialul unui număr natural nenul <code>n</code>, notat <code>n!</code>, se defineşte ca fiind produsul numerelor naturale de la <code>1</code> la <code>n</code>. Una dintre modalităţile de reprezentare a factorialului este prin enumerarea factorilor primi pe care îi conţine şi a exponenţilor acestora. | ||
Line 25: | Line 24: | ||
===Explicație=== | ===Explicație=== | ||
<code>5! = 1*2*3*4*5 = 23*31*51<code>3+1+1=5</code> | <code>5! = 1*2*3*4*5 = 23*31*51</code><code>3+1+1=5</code> | ||
==Exemplu 2== | ==Exemplu 2== | ||
;Intrare | ;Intrare | ||
Line 31: | Line 31: | ||
;Ieșire | ;Ieșire | ||
:1 | :1 | ||
==Rezolvare== | ==Rezolvare== | ||
<syntaxhighlight lang="python" line="1"> | <syntaxhighlight lang="python" line="1"> |
Revision as of 10:56, 26 March 2023
Cerința
Factorialul unui număr natural nenul n
, notat n!
, se defineşte ca fiind produsul numerelor naturale de la 1
la n
. Una dintre modalităţile de reprezentare a factorialului este prin enumerarea factorilor primi pe care îi conţine şi a exponenţilor acestora.
Fiind dat un număr natural n
, scrieţi un program care determină suma exponenţilor factorilor primi corespunzători descompunerii în factori primi a lui n
factorial.
Date de intrare
Fişierul de intrare factorial3.in
conţine pe prima linie numărul natural n
.
Date de ieșire
Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse."
Pe următorul rând se va afișa un număr reprezentând suma exponenţilor numerelor prime din descompunerea în factori primi a lui n!
.
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Datele de intrare nu corespund restricțiilor impuse."
Restricții și precizări
2 ≤ n ≤ 100.000
Exemplu 1
- Intrare
- 5
- Ieșire
- 5
Explicație
5! = 1*2*3*4*5 = 23*31*51
3+1+1=5
Exemplu 2
- Intrare
- 1
- Ieșire
- 1
Rezolvare
<syntaxhighlight lang="python" line="1">
- 2104 Factorial3
import math
def factori_primi(n):
factori = []
while n % 2 == 0: n = int(n / 2) factori.append(2)
for i in range(3, int(math.sqrt(n))+1, 2): while n % i == 0: factori.append(i) n = int(n / i) if n > 2: factori.append(n)
return factori
def suma_exponenti_nr_prime(n):
factori = [] for i in range(2, n+1): factori.extend(factori_primi(i)) factor_prim_nr = {} for factor in factori: factor_prim_nr[factor] = factor_prim_nr.get(factor, 0) + 1 return sum(factor_prim_nr.values())
def conditii(n):
return 2 <= n <= 100_000
def main():
n = int(input()) if not conditii(n): return print("Datele de intrare nu corespund restricțiilor impuse.") print("Datele de intrare corespund restricțiilor impuse.")
print(suma_exponenti_nr_prime(n))
if __name__ == "__main__":
main()
</syntaxhighlight>