0268 - Div K: Difference between revisions
Pagină nouă: == Cerinţa == Se dau '''n''' numere naturale şi un număr natural '''k'''. Afişaţi acele numere date care au cel puţin '''k''' divizori. == Date de intrare == Fişierul de intrare '''divk.in''' conţine pe prima linie numerele '''n''' şi '''k''', iar pe a doua linie '''n''' numere naturale separate prin spaţii. == Date de ieşire == Fişierul de ieşire '''divk.out''' va conţine pe prima linie numerele care au cel puţin '''k''' divizori, separate printr-un spaţiu,... |
|||
Line 18: | Line 18: | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
import math | import math | ||
def validare_date_numar( | |||
def validare_date_numar(numar): | |||
flag = False | flag = False | ||
if numar.isdigit(): | if numar.isdigit(): | ||
if 0 <= int( | if 0 <= int(numar) <= 1_000_000_000: | ||
flag = True | flag = True | ||
return flag | return flag | ||
Line 53: | Line 54: | ||
if __name__ == '__main__': | if __name__ == '__main__': | ||
k = input() | |||
if | if validare_date_numar(k): | ||
print("\nDatele de intrare corespund restricțiilor impuse.\n") | print("\nDatele de intrare corespund restricțiilor impuse.\n") | ||
with open('divk.in', 'r') as f: | |||
n, k = map(int, f.readline().split()) | |||
numere = list(map(int, f.readline().split())) | |||
rezultat = numere_cu_k_divizori(n, k, numere) | |||
with open('divk.out', 'w') as f: | |||
f.write(' '.join(map(str, rezultat))) | |||
else: | else: | ||
print("Datele de intrare nu corespund restricțiilor impuse.") | print("Datele de intrare nu corespund restricțiilor impuse.") | ||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 19:26, 18 March 2023
Cerinţa
Se dau n numere naturale şi un număr natural k. Afişaţi acele numere date care au cel puţin k divizori.
Date de intrare
Fişierul de intrare divk.in conţine pe prima linie numerele n şi k, iar pe a doua linie n numere naturale separate prin spaţii.
Date de ieşire
Fişierul de ieşire divk.out va conţine pe prima linie numerele care au cel puţin k divizori, separate printr-un spaţiu, în ordinea în care au fost citite.
Restricții și precizări
- 1 ⩽ n ⩽ 100
- numerele de pe a doua linie a fişierului de intrare, precum şi k vor avea cel mult 9 cifre
Exemplu
- divk.in
- 6 5
- 100 9 400 56 7 10
- divk.out
- Datele introduse corespund restricțiilor impuse.
- 100 400 56
Rezolvare
<syntaxhighlight lang="python" line> import math
def validare_date_numar(numar):
flag = False if numar.isdigit(): if 0 <= int(numar) <= 1_000_000_000: flag = True return flag
def validare_date_numere(n):
flag = False if 0 <= int(n) <= 1000: flag = True return flag
def numere_cu_k_divizori(n, k, numere):
rezultat = []
for nr in numere: divizori = 0 rad_nr = int(math.sqrt(nr))
for i in range(1, rad_nr + 1): if nr % i == 0: divizori += 2 if i == nr // i: divizori -= 1
if divizori >= k: rezultat.append(nr)
return rezultat
if __name__ == '__main__':
k = input() if validare_date_numar(k): print("\nDatele de intrare corespund restricțiilor impuse.\n") with open('divk.in', 'r') as f: n, k = map(int, f.readline().split()) numere = list(map(int, f.readline().split()))
rezultat = numere_cu_k_divizori(n, k, numere)
with open('divk.out', 'w') as f: f.write(' '.join(map(str, rezultat)))
else: print("Datele de intrare nu corespund restricțiilor impuse.")
</syntaxhighlight>