2407 - Odaoni
Sursa: [1]
Dorel a primit de ziua lui un tricou pe care era scris numărul n.
Cerinţa
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
Fișierul de intrare odaoni.in conține pe prima linie numărul n.
Date de ieșire
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
- 1 ≤ n ≤ 1.000.000.000
Exemplu
- odaoni.in
- 12
- odaoni.out
- 3
Rezolvare
<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>