0268 - Div K: Difference between revisions

From Bitnami MediaWiki
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(k):
 
def validare_date_numar(numar):
     flag = False
     flag = False
     if numar.isdigit():
     if numar.isdigit():
         if 0 <= int(k) <= 1_000_000_000:
         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()
    k = input()
     if validare_date(numar):
     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:
        with open('divk.in', 'r') as f:
        n, k = map(int, f.readline().split())
            n, k = map(int, f.readline().split())
        numere = list(map(int, f.readline().split()))
            numere = list(map(int, f.readline().split()))


    rezultat = numere_cu_k_divizori(n, k, numere)
        rezultat = numere_cu_k_divizori(n, k, numere)


    with open('divk.out', 'w') as f:
        with open('divk.out', 'w') as f:
        f.write(' '.join(map(str, rezultat)))
            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>