1981 - Divizori sir: Difference between revisions
Pagină nouă: == Cerinţa == Se dă următorul șir de numere naturale: '''1, 3, 9, 25, 65, 161, 385, 897, 2049, 4609, 10241, 22529, 49153, 106497…''' Pentru un număr natural n, citit de la tastatură, afișati numărul de divizori pentru fiecare dintre primii n termeni ai șirului. == Date de intrare == Programul citește de la tastatură numărul '''n'''; == Date de ieşire == Programul va afișa pe ecran cele '''n''' numere, reprezentând numărul de divizori ai fiecarui numar dint... |
No edit summary |
||
Line 11: | Line 11: | ||
== Restricții și precizări == | == Restricții și precizări == | ||
* '''0 < n < 60''' | * '''0 < n < 60''' | ||
== | == Exemplul 1 == | ||
; Intrare | ; Intrare | ||
: 4 | : 4 | ||
; Ieșire | ; Ieșire | ||
: Datele introduse corespund restricțiilor impuse. | |||
: 1 2 3 3 | : 1 2 3 3 | ||
== Exemplul 2 == | |||
; Intrare | |||
: n | |||
; Ieșire | |||
: Datele introduse nu corespund restricțiilor impuse. | |||
== Explicație == | == Explicație == | ||
* 1 are un divizor, | * 1 are un divizor, | ||
Line 22: | Line 28: | ||
* 25 are 3 divizori. | * 25 are 3 divizori. | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def numar_divizori( | def verificare_restrictii(n1): | ||
# functia de verificare a datelor de intrare | |||
if 1 <= n1 <= 10**5: | |||
return True | |||
else: | |||
return False | |||
def numar_divizori(n1): | |||
# Initializam sirul de numere | # Initializam sirul de numere | ||
sir = [2, 4] | sir = [2, 4] | ||
# Generam primii n termeni ai sirului | # Generam primii n termeni ai sirului | ||
for i in range(2, | for i in range(2, n1): | ||
sir.append(2 * sir[i - 1] + 2 * sir[i - 2]) | sir.append(2 * sir[i - 1] + 2 * sir[i - 2]) | ||
# Calculam numarul de divizori pentru fiecare termen al sirului | # Calculam numarul de divizori pentru fiecare termen al sirului | ||
divizori = [len(set(i for i in range(1, int(x**0.5) + 1) if x % i == 0)) for x in sir] | divizori = [len(set(i for i in range(1, int(x**0.5) + 1) if x % i == 0)) for x in sir] | ||
return divizori | return divizori | ||
if __name__ == "__main__": | if __name__ == "__main__": | ||
# Citim datele de intrare | try: | ||
# Citim datele de intrare | |||
n = int(input()) | |||
if verificare_restrictii(n): # verificam datele de intrare | |||
print("Datele de intrare corespund restrictiilor impuse.") | |||
# Calculam numarul de divizori | |||
rezultat = numar_divizori(n) | |||
# Afisam rezultatul | |||
print(' '.join(map(str, rezultat))) | |||
else: | |||
print("Datele de intrare nu corespund restrictiilor impuse.") | |||
# ne asteptam la 2 tipuri de erori din cauza datelor de intrare, le tratam corespunzator | |||
except ValueError: | |||
print("Datele de intrare nu corespund restrictiilor impuse.") | |||
except IndexError: | |||
print("Datele de intrare nu corespund restrictiilor impuse.") | |||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 17:19, 10 November 2023
Cerinţa
Se dă următorul șir de numere naturale:
1, 3, 9, 25, 65, 161, 385, 897, 2049, 4609, 10241, 22529, 49153, 106497…
Pentru un număr natural n, citit de la tastatură, afișati numărul de divizori pentru fiecare dintre primii n termeni ai șirului.
Date de intrare
Programul citește de la tastatură numărul n;
Date de ieşire
Programul va afișa pe ecran cele n numere, reprezentând numărul de divizori ai fiecarui numar dintre cele n, separate prin spații.
Restricții și precizări
- 0 < n < 60
Exemplul 1
- Intrare
- 4
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- 1 2 3 3
Exemplul 2
- Intrare
- n
- Ieșire
- Datele introduse nu corespund restricțiilor impuse.
Explicație
- 1 are un divizor,
- 3 are 2 divizori,
- 9 are 3 divizori,
- 25 are 3 divizori.
<syntaxhighlight lang="python" line> def verificare_restrictii(n1):
# functia de verificare a datelor de intrare if 1 <= n1 <= 10**5: return True else: return False
def numar_divizori(n1):
# Initializam sirul de numere sir = [2, 4] # Generam primii n termeni ai sirului for i in range(2, n1): sir.append(2 * sir[i - 1] + 2 * sir[i - 2]) # Calculam numarul de divizori pentru fiecare termen al sirului divizori = [len(set(i for i in range(1, int(x**0.5) + 1) if x % i == 0)) for x in sir] return divizori
if __name__ == "__main__":
try: # Citim datele de intrare n = int(input()) if verificare_restrictii(n): # verificam datele de intrare print("Datele de intrare corespund restrictiilor impuse.") # Calculam numarul de divizori rezultat = numar_divizori(n) # Afisam rezultatul print(' '.join(map(str, rezultat))) else: print("Datele de intrare nu corespund restrictiilor impuse.") # ne asteptam la 2 tipuri de erori din cauza datelor de intrare, le tratam corespunzator except ValueError: print("Datele de intrare nu corespund restrictiilor impuse.") except IndexError: print("Datele de intrare nu corespund restrictiilor impuse.")
</syntaxhighlight>