0379 - A Prim

From Bitnami MediaWiki
Revision as of 11:22, 6 April 2023 by Paul Matei (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa

Se citește un număr natural. Să se verifice dacă este aproape prim.

Date de intrare

Programul citește de la tastatură numărul numar.

Date de ieşire

Programul afișează pe ecran cuvântul DA, dacă numar este aproape prim, respectiv NU în caz contrar.

Restricții și precizări

  • 1 ≤ numar ≤ 1.000.000.000

Exemplu

Intrare
35
Ieșire
Datele introduse corespund restricțiilor impuse.
DA


Intrare
50
Ieșire
Datele introduse nu corespund restricțiilor impuse.
NU

Explicație

35=5*7.
50 nu poate fi scris ca produs de două numere prime distincte.

Rezolvare

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

   flag = False
   if numar.isdigit():
       if 0 <= int(numar) <= 1_000_000_000:
           flag = True
   return flag

def is_near_prime(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 is_near_prime_or_not(numar):

   if is_near_prime(numar) or is_near_prime(numar - 1) or is_near_prime(numar + 1):
       print("NU")
   else:
       print("DA")

def main():

   numar = input("Introduceti un numar natural: ")
   if validare_date(numar):
       numar = int(numar)
       is_near_prime_or_not(numar)
   else:
       print("Numarul introdus nu este valid.")

if __name__ == "__main__":

   main()


</syntaxhighlight>

Explicație rezolvare

Acest cod verifică dacă un număr natural introdus de la tastatură este un număr prim sau nu. Dacă numărul introdus nu este valid (nu este un număr natural între 0 și 1.000.000.000), programul va afișa un mesaj de eroare. În caz contrar, programul va verifica dacă numărul sau numerele adiacente (numărul anterior și numărul următor) sunt prime sau nu, utilizând funcția is_near_prime(). Dacă cel puțin unul dintre aceste numere este prim, programul va afișa NU, altfel va afișa DA.