1931 - Fantastice: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinţa == Definim un număr ca fiind fantastic dacă numărul de numere la care acesta se împarte exact este un număr prim. Dându-se un șir cu '''numar_elemente''' numere întregi strict pozitive, să se afișeze numărul de numere fantastice din șir. == Date de intrare == Fișierul de intrare '''fantastice.in''' conține pe prima linie numărul '''numar_elemente''' de numere, iar pe cea de-a doua linie, separate prin câte un spaţiu, cele '''numar_elemente''' nu...
 
No edit summary
Line 9: Line 9:
== Restricţii şi precizări ==
== Restricţii şi precizări ==
* 1 ⩽ '''numar_elemente''' ⩽ 1000000  
* 1 ⩽ '''numar_elemente''' ⩽ 1000000  
* numerele de pe a doua linie a fișierului de intrare vor fi mai mici sau egale cu '''1.000.000'''
* numerele de pe a doua linie a fișierului de intrare vor fi mai mici sau egale cu 1.000.000
== Exemplu 1 ==
== Exemplu 1 ==
; fantastice.in  
; fantastice.in  
Line 80: Line 80:
</syntaxhighlight>
</syntaxhighlight>
==Explicatie==
==Explicatie==
O secvență de lungime maximă cu suma elementelor mai mică sau egală cu 11 este 5 2 3.
:21 are divizorii 1, 3, 7, 21
:19 are divizorii 1, 19
:25 are divizorii 1, 5, 25
:16 are divizorii 1, 2, 4, 8, 16
:27 are divizorii 1, 3, 9, 27
:729 are divizorii 1, 3, 9, 27, 81, 243, 729
:Deci sunt 4 numere fantastice: 19 25 16 729

Revision as of 15:26, 14 November 2023

Cerinţa

Definim un număr ca fiind fantastic dacă numărul de numere la care acesta se împarte exact este un număr prim. Dându-se un șir cu numar_elemente numere întregi strict pozitive, să se afișeze numărul de numere fantastice din șir.

Date de intrare

Fișierul de intrare fantastice.in conține pe prima linie numărul numar_elemente de numere, iar pe cea de-a doua linie, separate prin câte un spaţiu, cele numar_elemente numere.

Date de ieșire

Fișierul de ieșire fantastice.out va conține pe prima linie numărul de numere fantastice din șir. În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Datele de intrare nu corespund cerintelor impuse.".

Restricţii şi precizări

  • 1 ⩽ numar_elemente ⩽ 1000000
  • numerele de pe a doua linie a fișierului de intrare vor fi mai mici sau egale cu 1.000.000

Exemplu 1

fantastice.in
6
21 19 25 16 27 729
fantastice.out
4


Exemplu 2

fantastice.in
5
1000001 500000 700000 900000 1200000
fantastice.out
Datele de intrare nu corespund cerintelor impuse.


Rezolvare

<syntaxhighlight lang="python" line> def este_prim(numar):

   if numar < 2:
       return False
   for i in range(2, int(numar**0.5) + 1):
       if numar % i == 0:
           return False
   return True

def numere_fantastice(șir):

   count_fantastice = 0
   for numar in șir:
       if numar <= 0 or numar > 1000000:
           return -1  # Datele de intrare nu respectă condițiile
       numar_divizori = 0
       for i in range(1, numar + 1):
           if numar % i == 0:
               numar_divizori += 1
       if este_prim(numar_divizori):
           count_fantastice += 1
   return count_fantastice

def main():

   # Citirea din fișierul de intrare
   try:
       with open("fantastice.in", "r") as file:
           numar_elemente = int(file.readline().strip())
           numere = list(map(int, file.readline().split()))
   except FileNotFoundError:
       print("Fisierul de intrare nu exista.")
       return
   except ValueError:
       print("Datele de intrare nu sunt valide.")
       return
   # Verificarea restricțiilor și calculul numărului de numere fantastice
   rezultat = numere_fantastice(numere)
   # Scrierea în fișierul de ieșire sau afișarea mesajului de eroare
   with open("fantastice.out", "w") as file:
       if rezultat == -1:
           file.write("Datele de intrare nu corespund cerintelor impuse.\n")
       else:
           file.write(str(rezultat) + "\n")

if __name__ == "__main__":

   main()

</syntaxhighlight>

Explicatie

21 are divizorii 1, 3, 7, 21
19 are divizorii 1, 19
25 are divizorii 1, 5, 25
16 are divizorii 1, 2, 4, 8, 16
27 are divizorii 1, 3, 9, 27
729 are divizorii 1, 3, 9, 27, 81, 243, 729
Deci sunt 4 numere fantastice: 19 25 16 729