1345 - K Prim

From Bitnami MediaWiki
Revision as of 09:18, 25 March 2023 by Paul Matei (talk | contribs) (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...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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

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

   try:
       n = int(n)
       if n < 1:
           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):

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

def main():

   with open('kprim.in', 'r') as fin, open('kprim.out', 'w') as fout:
       n = fin.readline().strip()
       if not validare_date(n):
           return
       n = int(n)
       if n == 1:
           fout.write('9')
       else:
           x = 3
           while n > 0:
               if is_prime(x):
                   r = x
                   n -= 1
               x += 1
           p = r * r
           fout.write(str(p))

if __name__ == '__main__':

   main()


</syntaxhighlight>