1931 - Fantastice: Diferență între versiuni

De la Universitas MediaWiki
Fără descriere a modificării
Fără descriere a modificării
 
Linia 3: Linia 3:
Dându-se un șir cu '''numar_elemente''' numere întregi strict pozitive, să se afișeze numărul de numere fantastice din șir.
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 ==
== 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.
Fișierul de intrare '''fantasticein.txt''' 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 ==  
== Date de ieșire ==  
Fișierul de ieșire '''fantastice.out''' va conține pe prima linie numărul de numere fantastice din șir.
Fișierul de ieșire '''fantasticeout.txt''' 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.".
Î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 ceerintelor impuse.", iar daca indeplinesc cerintele enuntate se va afisa mesajul "Datele de intrare corespund cerintelor impuse."
== 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 ==
== Exemplul 1 ==
; fantastice.in
; fantasticein.txt
:6
6
:21 19 25 16 27 729
21 19 25 16 27 729
 
; fantasticeout.txt
Datele de intrare corespund cerintelor impuse.
 
4
 
==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
 


; fantastice.out
: 4
<br>
<br>
== Exemplu 2 ==
== Exemplul 2 ==
; fantastice.in  
; fantastice.in  
:5
5
:1000001 500000 700000 900000 1200000
1000001 500000 700000 900000 1200000
; fantastice.out  
; fantastice.out  
: Datele de intrare nu corespund cerintelor impuse.
Datele de intrare nu corespund cerintelor impuse.
<br>
<br>


Linia 56: Linia 69:
     # Citirea din fișierul de intrare
     # Citirea din fișierul de intrare
     try:
     try:
         with open("fantastice.in", "r") as file:
         with open("fantasticein.txt", "r") as file:
             numar_elemente = int(file.readline().strip())
             numar_elemente = int(file.readline().strip())
             numere = list(map(int, file.readline().split()))
             numere = list(map(int, file.readline().split()))
Linia 63: Linia 76:
         return
         return
     except ValueError:
     except ValueError:
         print("Datele de intrare nu sunt valide.")
         print("Datele de intrare nu corespund cerintelor impuse.")
         return
         return


Linia 70: Linia 83:


     # Scrierea în fișierul de ieșire sau afișarea mesajului de eroare
     # Scrierea în fișierul de ieșire sau afișarea mesajului de eroare
     with open("fantastice.out", "w") as file:
     with open("fantasticeout.txt", "w") as file:
         if rezultat == -1:
         if rezultat == -1:
             file.write("Datele de intrare nu corespund cerintelor impuse.\n")
             file.write("Datele de intrare nu corespund cerintelor impuse.\n")
         else:
         else:
            file.write("Datele de intrare corespund cerintelor impuse.\n")
             file.write(str(rezultat) + "\n")
             file.write(str(rezultat) + "\n")


Linia 79: Linia 93:
     main()
     main()
</syntaxhighlight>
</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

Versiunea curentă din 4 ianuarie 2024 18:55

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 fantasticein.txt 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 fantasticeout.txt 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 ceerintelor impuse.", iar daca indeplinesc cerintele enuntate se va afisa mesajul "Datele de intrare 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

Exemplul 1

fantasticein.txt
6
21 19 25 16 27 729
fantasticeout.txt
Datele de intrare corespund cerintelor impuse.
4

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



Exemplul 2

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


Rezolvare

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("fantasticein.txt", "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 corespund cerintelor impuse.")
        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("fantasticeout.txt", "w") as file:
        if rezultat == -1:
            file.write("Datele de intrare nu corespund cerintelor impuse.\n")
        else:
            file.write("Datele de intrare corespund cerintelor impuse.\n")
            file.write(str(rezultat) + "\n")

if __name__ == "__main__":
    main()