1345 - K Prim: Diferență între versiuni

De la Universitas MediaWiki
(Pagină nouă: == Cerinţa == Să se scrie un program care citește un număr natural '''k''' și afișează cel mai mic număr natural '''n''' mai mare decât '''1''', care nu este divizibil cu primele '''k''' numere prime și nu este prim. Fișierul de intrare '''kprim.in''' conține pe prima linie numărul '''k'''. == Date de ieşire == Fișierul de ieșire '''kprim.out''' va conține pe prima linie numărul '''n''', reprezentând cel mai mic număr natural '''n''',care nu este divizibil...)
 
Fără descriere a modificării
 
Linia 17: Linia 17:
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
import math
def validare_date(n):
def validare_date(n):
     try:
     if isinstance(n, int) and n > 0:
        n = int(n)
        return True
        if n < 1:
     return False
            print("Numărul introdus trebuie să fie cel puțin 1!")
            return False
     except ValueError:
        print("Intrarea trebuie să fie un număr întreg!")
        return False
    return True


def is_prime(n):
def prim(n):
     if n < 2:
     if n == 0 or n == 1:
         return False
         return False
     if n == 2:
     if n == 2:
Linia 35: Linia 31:
     if n % 2 == 0:
     if n % 2 == 0:
         return False
         return False
     for i in range(3, int(n**0.5) + 1, 2):
     for i in range(3, int(math.sqrt(n))+1, 2):
         if n % i == 0:
         if n % i == 0:
             return False
             return False
     return True
     return True


def main():
if __name__ == '__main__':
    with open('kprim.in', 'r') as fin, open('kprim.out', 'w') as fout:
    n = int(input("Introduceti un numar natural: "))
        n = fin.readline().strip()
    if validare_date(n):
        if not validare_date(n):
            return
        n = int(n)
         if n == 1:
         if n == 1:
             fout.write('9')
             print(9)
         else:
         else:
             x = 3
             x = 3
             while n > 0:
             while n > 0:
                 if is_prime(x):
                 if prim(x):
                     r = x
                     r = x
                     n -= 1
                     n -= 1
                 x += 1
                 x += 1
             p = r * r
             p = r * r
             fout.write(str(p))
             print(p)
 
    else:
if __name__ == '__main__':
        print("\nDatele de intrare nu corespund restrictiilor impuse.")
    main()


    
    


</syntaxhighlight>
</syntaxhighlight>
==Explicație rezolvare==
Acest program calculează pătratul celui de-al n-lea număr prim, unde '''n''' este un număr natural citit de la tastatură. Înainte de a începe calculele, programul verifică dacă datele de intrare sunt valide, adică dacă '''n''' este un număr natural pozitiv. Dacă datele sunt invalide, programul va afișa un mesaj corespunzător. Dacă datele sunt valide și '''n''' este egal cu 1, programul va afișa numărul 9. În caz contrar, programul va căuta cel de-al n-lea număr prim și va calcula pătratul acestuia, folosind o funcție care verifică dacă un număr dat este prim. Rezultatul este apoi afișat la ecran.

Versiunea curentă din 9 aprilie 2023 19:16

Cerinţa

Să se scrie un program care citește un număr natural k și afișează cel mai mic număr natural n mai mare decât 1, care nu este divizibil cu primele k numere prime și nu este prim. Fișierul de intrare kprim.in conține pe prima linie numărul k.

Date de ieşire

Fișierul de ieșire kprim.out va conține pe prima linie numărul n, reprezentând cel mai mic număr natural n,care nu este divizibil cu primele k numere prime și nu este prim.

Restricții și precizări

  • 1 ≤ k ≤ 10000

Exemplu

kprim.in
3
kprim.out
49

Explicație

Primele 3 numere prime sunt 2, 3, 5. Numerele care nu sunt divizibile cu 2, 3 sau 5 sunt : 7, 11, 13, 17, 19, 23, 31, 37, 41, 47, 49, … 49 este cel mai mic număr care nu este prim

Rezolvare

import math

def validare_date(n):
    if isinstance(n, int) and n > 0:
        return True
    return False

def prim(n):
    if n == 0 or n == 1:
        return False
    if n == 2:
        return True
    if n % 2 == 0:
        return False
    for i in range(3, int(math.sqrt(n))+1, 2):
        if n % i == 0:
            return False
    return True

if __name__ == '__main__':
    n = int(input("Introduceti un numar natural: "))
    if validare_date(n):
        if n == 1:
            print(9)
        else:
            x = 3
            while n > 0:
                if prim(x):
                    r = x
                    n -= 1
                x += 1
            p = r * r
            print(p)
    else:
        print("\nDatele de intrare nu corespund restrictiilor impuse.")

Explicație rezolvare

Acest program calculează pătratul celui de-al n-lea număr prim, unde n este un număr natural citit de la tastatură. Înainte de a începe calculele, programul verifică dacă datele de intrare sunt valide, adică dacă n este un număr natural pozitiv. Dacă datele sunt invalide, programul va afișa un mesaj corespunzător. Dacă datele sunt valide și n este egal cu 1, programul va afișa numărul 9. În caz contrar, programul va căuta cel de-al n-lea număr prim și va calcula pătratul acestuia, folosind o funcție care verifică dacă un număr dat este prim. Rezultatul este apoi afișat la ecran.