0268 - Div K

From Bitnami MediaWiki

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>