2323 - Prim 001: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinţa == Se dă un număr natural '''n'''. Să se afle numărul divizorilor naturali ai lui '''n^n'''. == Date de intrare == Programul citește de la tastatură numărul '''n'''. == Date de ieşire == Programul va afișa pe ecran numărul divizorilor lui '''n^n''', modulo '''59999'''. == Restricții și precizări == *'''1 ≤ n ≤ 10^13''' == Exemplu == ; Intrare :4 ; Ieșire :9 == Explicație == Numărul '''4^4=256''' are '''9''' divizori: '''1,2,4,8,16,32,64,128,25...
 
No edit summary
 
(2 intermediate revisions by one other user not shown)
Line 16: Line 16:
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
def valideaza_date(n):
def validare_date(n):  
   
     if not n.isdigit() or int(n) <= 0:
     if not n.isdigit() or int(n) <= 0:
         return False
         return False
     return True
     return True


if __name__ == '__main__':
if __name__ == '__main__':
     n = input("Introduceți un număr întreg pozitiv: ")
     n = input("Introduceți un număr întreg pozitiv: ")
     if valideaza_date(n):
     if validare_date(n):
         print("\nDatele de intrare corespund restricțiilor impuse.\n")
         print("\nDatele de intrare corespund restricțiilor impuse.\n")    
 
       
         n = int(n)
         n = int(n)
         cnt, d = 1, 2
         cnt, d = 1, 2
         cn = n
         cn = n
         while n > 1:
         while n > 1:
             p = 0
             p = 0
Line 44: Line 39:
             while cnt >= 59999:
             while cnt >= 59999:
                 cnt %= 59999
                 cnt %= 59999
         print(cnt % 59999)
         print(cnt % 59999)
     else:
     else:
         print("Datele de intrare nu corespund restricțiilor impuse.")
         print("Datele de intrare nu corespund restricțiilor impuse.")
Line 52: Line 45:




</syntaxhighlight>


</syntaxhighlight>
==Explicație rezolvare==
==Explicație rezolvare==
Programul primește un număr întreg pozitiv de la utilizator și calculează numărul divizorilor acestuia folosind formula: numărul total de divizori ai lui n este produsul (p * cn + 1), unde p este exponentul unui factor prim, iar cn este numărul nesimplificat.
Acest cod verifică dacă datele de intrare sunt corecte și apoi calculează numărul de divizori proprii ai unui număr întreg dat prin parcurgerea tuturor divizorilor primi ai numărului și calcularea puterilor lor. În cele din urmă, se afișează numărul de divizori proprii '''modulo 59999'''.
 
Pentru a calcula divizorii, programul parcurge toți factorii primi ai numărului și calculează exponenții lor. De asemenea, programul utilizează o condiție pentru a nu depăși pătratul numărului, care ar fi un factor mai mare decât numărul în sine.
 
În final, programul afișează numărul total de divizori al numărului, modulo 59999. De asemenea, acesta include o funcție valideaza_date() pentru a valida intrarea utilizatorului.

Latest revision as of 11:50, 11 April 2023

Cerinţa[edit | edit source]

Se dă un număr natural n. Să se afle numărul divizorilor naturali ai lui n^n.

Date de intrare[edit | edit source]

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

Date de ieşire[edit | edit source]

Programul va afișa pe ecran numărul divizorilor lui n^n, modulo 59999.

Restricții și precizări[edit | edit source]

  • 1 ≤ n ≤ 10^13

Exemplu[edit | edit source]

Intrare
4
Ieșire
9

Explicație[edit | edit source]

Numărul 4^4=256 are 9 divizori: 1,2,4,8,16,32,64,128,256.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def validare_date(n):

   if not n.isdigit() or int(n) <= 0:
       return False
   return True

if __name__ == '__main__':

   n = input("Introduceți un număr întreg pozitiv: ")
   if validare_date(n):
       print("\nDatele de intrare corespund restricțiilor impuse.\n")      
       n = int(n)
       cnt, d = 1, 2
       cn = n
       while n > 1:
           p = 0
           while n % d == 0:
               n //= d
               p += 1
           cnt *= (p * cn + 1)
           d += 1
           if d * d > n:
               d = n
           while cnt >= 59999:
               cnt %= 59999
       print(cnt % 59999)
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.")


</syntaxhighlight>

Explicație rezolvare[edit | edit source]

Acest cod verifică dacă datele de intrare sunt corecte și apoi calculează numărul de divizori proprii ai unui număr întreg dat prin parcurgerea tuturor divizorilor primi ai numărului și calcularea puterilor lor. În cele din urmă, se afișează numărul de divizori proprii modulo 59999.