2104 - Factorial 3: Difference between revisions
No edit summary |
|||
| Line 21: | Line 21: | ||
===Explicație=== | ===Explicație=== | ||
<code>5! = 1*2*3*4*5 = 23*31*51 | <code>5! = 1*2*3*4*5 = 23*31*51<code>3+1+1=5</code> | ||
<code>3+1+1=5</code> | |||
==Exemplu 2== | ==Exemplu 2== | ||
;Intrare | ;Intrare | ||
| Line 30: | Line 27: | ||
;Ieșire | ;Ieșire | ||
:1 | :1 | ||
==Rezolvare== | ==Rezolvare== | ||
<syntaxhighlight lang="python" line="1"> | <syntaxhighlight lang="python" line="1"> | ||
Revision as of 12:57, 21 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
Fişierul de ieşire factorial3.out va conţine pe prima linie un număr reprezentând suma exponenţilor numerelor prime din descompunerea în factori primi a lui n!.
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*513+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("Date de intrare gresite!")
print(suma_exponenti_nr_prime(n))
if __name__ == "__main__":
main()
</syntaxhighlight>