2767 - Masterpiece 003

From Bitnami MediaWiki

Cerința[edit | edit source]

Se consideră două numere naturale n și k.

Se consideră P = { p1 , p2 , p3  … pk } , șirul primelor k numere prime.

Se consideră mulțimea S = { x | x = p1e1 * p2e2 * … * pkek } unde e1 , e2 , e3  … ek sunt numere naturale.

Să se afișeze în ordine crescătoare primele n elemente mulțimii S.

Date de intrare[edit | edit source]

Programul citește de la tastatură numerele n și k.

Date de ieșire[edit | edit source]

Programul afișează pe ecran, în ordine crescătoare, separate prin câte un spațiu, primele n elemente ale mulțimii S.

Restricții și precizări[edit | edit source]

  • 1 ≤ n ≤ 100000
  • 1 ≤ k ≤ 10

Exemplul 1[edit | edit source]

Input:

40 5

Output:

1 2 3 4 5 6 7 8 9 10 11 12 14 15 16 18 20 21 22 24 25 27 28 30 32 33 35 36 40 42 44 45 48 49 50 54 55 56 60 63

Explicație:

Oricare dintre numerele afișate conțin în descompunerea lor în factori primi doar factori din mulțimea {2, 3, 5, 7, 11}.

Din șirul afișat lipsesc numerele care au în descompunerea lor în factori primi și alte numere în afară de 2, 3, 5, 7, 11. De exemplu numărul 26 nu va fi afișat pentru că, în decompunerea lui apare factorul 13.

Exemplul 2[edit | edit source]

Input:

40 99

Output:

Constrangeri neindeplinite

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> def verify(n, k):

   if not (1<=n<=100000):
       print("Constrangeri neindeplinite")
       exit()
   if not (1<=k<=10):
       print("Constrangeri neindeplinite")
       exit()

n, k = map(int, input().split())

verify(n,k)

s = [0] * (n + 1) p = [0, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29] d = [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] c = [0, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

s[1] = 1

for i in range(2, n + 1):

   minim = c[1]
   for j in range(1, k + 1):
       if c[j] < minim:
           minim = c[j]
   
   s[i] = minim
   
   for j in range(1, k + 1):
       if c[j] == minim:
           d[j] += 1
           c[j] = s[d[j]] * p[j]

for i in range(1, n + 1):

   print(s[i], end=' ')

</syntaxhighlight>