2547 - Divizori 3

From Bitnami MediaWiki
Revision as of 17:33, 18 March 2023 by Paul Matei (talk | contribs) (Pagină nouă: == Cerinţa == Se citesc două numere naturale '''numar1''' și '''numar2''' ('''numar1 < numar2''') având cel mult '''9''' cifre fiecare. Afișați câte numere din intervalul '''[numar1, numar2]''' au exact '''3''' divizori. == Date de intrare == Programul citește de la tastatură numerele '''numar1''' și '''numar2''', separate printr-un spațiu. == Date de ieşire == Programul va afișa pe ecran numărul de numere din intervalul '''[numar1,numar2]'''care au exact '''3''...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa

Se citesc două numere naturale numar1 și numar2 (numar1 < numar2) având cel mult 9 cifre fiecare. Afișați câte numere din intervalul [numar1, numar2] au exact 3 divizori.

Date de intrare

Programul citește de la tastatură numerele numar1 și numar2, separate printr-un spațiu.

Date de ieşire

Programul va afișa pe ecran numărul de numere din intervalul [numar1,numar2]care au exact 3 divizori.

Restricții și precizări

  • 1 ≤ numar1< numar2 < 1.000.000.000

Exemplu

Intrare
11 50
Ieșire
2

Explicație

Numerele din intervalul [11,50] care au exact 3 divizori sunt 25 și 49.

Rezolvare

<syntaxhighlight lang="python" line> def validare_date(numar1, numar2):

   flag = False
   if numar1.isdigit() and numar2.isdigit():
       if 0 < int(numar1) < int(numar2) <= 1_000_000_000 and int(numar2) - int(numar1) <= 1000:
           flag = True
   return flag

def numar_divizori(n):

   divizori = 0
   for i in range(1, int(n**0.5) + 1):
       if n % i == 0:
           divizori += 2
           if n // i == i:
               divizori -= 1
       if divizori > 3:
           break
   return divizori == 3

def main():

   numar1, numar2 = input().split()
   if validare_date(numar1, numar2):
       numar1 = int(numar1)
       numar2 = int(numar2)
       numar = 0
       for i in range(numar1, numar2 + 1):
           if numar_divizori(i):
               numar += 1
       print(numar)
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.")

if __name__ == "__main__":

   main()


</syntaxhighlight>