2420 - EasyRow: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerința == Se consideră următorul șir de numere naturale: 1 3 5 8 10 14 16..., în care termenul de pe poziția i (i > 1) este egal cu cel precedent plus numărul de divizori ai lui i. Afișați al n-lea termen. == Date de intrare == Programul citește de la tastatură numărul n. == Date de ieșire == Programul va afișa pe ecran numărul x, reprezentând al n-lea termen din șir. == Restricții și precizări == 1 ≤ n ≤ 100.000 == Exemplul 1 == ; Intrare : 5 ; I...
 
No edit summary
Tag: visualeditor
 
(2 intermediate revisions by the same user not shown)
Line 11: Line 11:
: 5
: 5
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: Datele de intrare corespund restricțiilor impuse.
: 10
: 10
<br>
<br>
Line 24: Line 24:
<br>
<br>
== Rezolvare ==  
== Rezolvare ==  
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line="1">
#2420 - EasyRow
#2420 - EasyRow
def numar_divizori(n):
def numar_divizori(n):
     count = 0
     count = 0
     for i in range(1, int(n**0.5) + 1):
     for i in range(1, n + 1): # se parcurge intervalul [1, n]
         if n % i == 0:
         if n % i == 0:       # se verifică dacă i este divizor al lui n
             if n // i == i:
             count += 1       # dacă da, se adaugă 1 la numărul total de divizori
                count += 1
     return count             # numărul total de divizori
            else:
                count += 2
     return count


n = int(input())
def n_termen(n):
    if n == 1:
        return 1
    else:
        previous_termen = n_termen(n - 1)          # se calculează termenul anterior
        return previous_termen + numar_divizori(n) # se calculează termenul curent adunând numărul de divizori ai lui n


if n >= 1 and n <= 100000:
if __name__ == "__main__":
     prev = 1
    n = int(input("Introduceti n: "))
    for i in range(2, n+1):
     if n >= 1:
         numar_x = prev + numar_divizori(i)
        termen = n_termen(n)
         prev = numar_x
         print("Datele de intrare corespund restricțiilor impuse.")
        print(f"Termenul de pe pozitia {n} este {termen}.")
    else:
         print("Datele de intrare nu corespund restricțiilor impuse.")


     print(x)
      
     print("Datele de intrare corespund restricțiilor impuse.")
      
else:
    print("Nu au fost respectate restricțiile impuse.")
</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 21:20, 23 April 2023

Cerința[edit]

Se consideră următorul șir de numere naturale: 1 3 5 8 10 14 16..., în care termenul de pe poziția i (i > 1) este egal cu cel precedent plus numărul de divizori ai lui i. Afișați al n-lea termen.

Date de intrare[edit]

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

Date de ieșire[edit]

Programul va afișa pe ecran numărul x, reprezentând al n-lea termen din șir.

Restricții și precizări[edit]

1 ≤ n ≤ 100.000

Exemplul 1[edit]

Intrare
5
Ieșire
Datele de intrare corespund restricțiilor impuse.
10


Exemplul 2[edit]

Intrare
-10
Ieșire
Datele de intrare nu corespund restricțiilor impuse.



Rezolvare[edit]

<syntaxhighlight lang="python" line="1">

  1. 2420 - EasyRow

def numar_divizori(n):

   count = 0
   for i in range(1, n + 1): # se parcurge intervalul [1, n]
       if n % i == 0:        # se verifică dacă i este divizor al lui n
           count += 1        # dacă da, se adaugă 1 la numărul total de divizori
   return count              # numărul total de divizori

def n_termen(n):

   if n == 1:
       return 1
   else:
       previous_termen = n_termen(n - 1)           # se calculează termenul anterior
       return previous_termen + numar_divizori(n)  # se calculează termenul curent adunând numărul de divizori ai lui n

if __name__ == "__main__":

   n = int(input("Introduceti n: "))
   if n >= 1:
       termen = n_termen(n)
       print("Datele de intrare corespund restricțiilor impuse.")
       print(f"Termenul de pe pozitia {n} este {termen}.")
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.")


</syntaxhighlight>