2247 - Nr Div

From Bitnami MediaWiki

Enunț[edit | edit source]

Se consideră un număr natural N care este par.

Cerința[edit | edit source]

Să se determine cel mai mic număr natural impar M care are același număr de divizori ca și 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 cel mai mic număr natural impar M care are același număr de divizori ca și N.

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

  • 1 ≤ N ≤ 1 000 000 000 și este par
  • Se garantează că M va fi mai mic decât 2 000 000 000

Exemplu 1[edit | edit source]

Intrare
360
Iesire
Numarul 360 are 24 divizori.
Am gasit un numar impar 3465 cu acelasi numar de divizori.

Exemplu 2[edit | edit source]

Intrare
3465
Iesire
Numarul introdus nu este par sau nu respecta restrictiile. Te rog sa reintroduci un numar valid.

Exemplu 3[edit | edit source]

Intrare
1024
Iesire
Numarul 1024 are 11 divizori.
Am gasit un numar impar 59049 cu acelasi numar de divizori.

Rezolvare[edit | edit source]

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

  1. 2247 NrDiv

def numar_divizori(n):

   count = 0
   for i in range(1, n + 1):
       if n % i == 0:
           count += 1
   return count

def gaseste_numar_impar_cu_divizori_egal(numar_par):

   numar_divizori_par = numar_divizori(numar_par)
   
   for M in range(1, 1000000000, 2):  # cautam numere impare
       if numar_divizori(M) == numar_divizori_par:
           return M

def main():

   while True:
       try:
           # Citirea unui numar de la tastatura
           N = int(input("Introdu un numar par 'N': "))
           # Verifica daca numarul este par si indeplineste restrictiile
           if 1 <= N <= 1000000000 and N % 2 == 0:
               # Calculare numar divizori
               numar_divizori_N = numar_divizori(N)
               print(f"Numarul {N} are {numar_divizori_N} divizori.")
               # Cautarea unui numar impar cu acelasi numar de divizori
               M = gaseste_numar_impar_cu_divizori_egal(N)
               print(f"Am gasit un numar impar {M} cu acelasi numar de divizori.")
               
               break
           else:
               print("Numarul introdus nu este par sau nu respecta restrictiile. Te rog sa reintroduci un numar valid.")
       except ValueError:
           print("Te rog sa introduci un numar intreg valid.")

if __name__ == "__main__":

   main()

</syntaxhighlight>