2407 - Odaoni

From Bitnami MediaWiki

Sursa: [1]


[edit | edit source]

Dorel a primit de ziua lui un tricou pe care era scris numărul n.

Cerinţa[edit | edit source]

Aflaţi câţi divizori ai lui n au mulţimea cifrelor din scrierea lor inclusă în mulţimea cifrelor din scrierea lui n.

Date de intrare[edit | edit source]

Fișierul de intrare odaoni.in conține pe prima linie numărul n.

Date de ieșire[edit | edit source]

Fișierul de ieșire odaoni.out va conține pe prima linie numărul divizorilor lui n care au mulţimea cifrelor din scrierea lor inclusă în mulţimea cifrelor din scrierea lui n.

Restricţii şi precizări[edit | edit source]

  • 1 ≤ n ≤ 1.000.000.000

Exemplu[edit | edit source]

odaoni.in
12
odaoni.out
3

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

def aceleasi_cifre(numar, divizor):

   # Verifică dacă numarul are aceleași cifre ca divizor.
   return set(str(numar)) <= set(str(divizor))

def nr_divizori_cu_aceleasi_cifre(numar):

   # Calculează numărul de divizori ai numarului care au mulțimea cifrelor din scrierea lor inclusă în mulțimea cifrelor din scrierea numarului.
   # inițializăm numărul de divizori cu 0
   count = 0
   # iterăm prin toți divizorii numarului
   for i in range(1, numar + 1):
       if numar % i == 0 and aceleasi_cifre(i, numar):
           count += 1
   # returnăm numărul de divizori
   return count

if __name__ == '__main__':

   # deschidem fișierele de intrare și de ieșire
   with open("odaoni.in", "r") as fin, open("odaoni.out", "w") as fout:
       # citim numărul din fișierul de intrare
       numar = int(fin.readline().strip())
       # verificăm validitatea datelor de intrare
       if not (1 <= numar <= 1000000000):
           raise ValueError("Numarul trebuie să fie între 1 și 1000000000")
       # calculăm cati divizori au acelasi cifre ca numarul
       count = nr_divizori_cu_aceleasi_cifre(numar)
       # scriem rezultatul în fișierul de ieșire
       fout.write(str(count) + "\n")

</syntaxhighlight>