2351 - Numere 23: Diferență între versiuni
Fără descriere a modificării |
Fără descriere a modificării |
||
Linia 26: | Linia 26: | ||
:5 3 2 | :5 3 2 | ||
;Ieșire | ;Ieșire | ||
:Datele de intrare corespund restricțiilor impuse. | |||
:2 6 4 3 5 | :2 6 4 3 5 | ||
===Explicație=== | ===Explicație=== | ||
Linia 33: | Linia 34: | ||
:10 4 2 | :10 4 2 | ||
;Ieșire | ;Ieșire | ||
:Datele de intrare corespund restricțiilor impuse. | |||
:2 11 10 5 3 8 7 9 4 6 | :2 11 10 5 3 8 7 9 4 6 | ||
===Explicație=== | ===Explicație=== | ||
Linia 40: | Linia 42: | ||
:5 3 1 | :5 3 1 | ||
;Ieșire | ;Ieșire | ||
:Datele de intrare corespund restricțiilor impuse. | |||
:6 | :6 | ||
===Explicație=== | ===Explicație=== |
Versiunea de la data 29 aprilie 2023 14:08
Cerința
Se numește număr 3-prim, un număr natural care se poate descompune în produs de cel mult 3
numere prime, nu neapărat distincte. Cunoscând numerele naturale n
și k
, construiți un șir format din primele n
numere 3-prime. Ordinea numerelor în șir va fi stabilită astfel încât, extrăgând pe rând numerele din șir, începând cu primul număr și apoi câte un număr din k
în k
poziții, circular, să obținem în ordine crescătoare, șirul primelor n
numere 3-prime. Parcurgerea circulară înseamnă că după elementul aflat în vector pe locul n
, urmează elementul de pe locul 1
.
Cunoscând numerele n
, k
și c
(c = 1
sau c = 2
), se cere:
1. dacă c = 1
, să se afișeze cel mai mare din cele n
numere 3-prime.
2. dacă c = 2
, să se construiască șirul de n
numere care îndeplinește condiția din enunț.
Date de intrare
Fișierul de intrare numere23.in
conţine pe prima linie, despărțite prin câte un spațiu, numerele naturale n
, k
și c
, cu semnificaţia din enunţ.
Date de ieșire
Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse."
Dacă c = 1
, atunci pe următorul rând se va afișa un singur număr ce reprezintă cel mai mare din cele n
numere 3-prime. Dacă c = 2
, atunci se vor afișa despărțite prin câte un spațiu, șirul celor n
numere 3-prime.
Î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 restricțiilor impuse."
Restricții și precizări
0 < k < n ≤ 10000
- numerotarea elementelor în vector se face de la
1
Exemplu 1
- Intrare
- 5 3 2
- Ieșire
- Datele de intrare corespund restricțiilor impuse.
- 2 6 4 3 5
Explicație
Primele cinci numere 3-prime sunt: 2
, 3
, 4
, 5
, și 6
. Șirul de numere 2
, 6
, 4
, 3
, 5
parcurs din 3
în 3
, va forma în ordine crescătoare șirul de numere inițial.
Exemplu 2
- Intrare
- 10 4 2
- Ieșire
- Datele de intrare corespund restricțiilor impuse.
- 2 11 10 5 3 8 7 9 4 6
Explicație
Primele 10
numere 3-prime sunt: 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
, 10
, 11
. Șirul de numere 2
, 11
, 10
, 5
, 3
, 8
, 7
, 9
, 4
, 6
, parcurs din 4
în 4
, va forma în ordine crescătoare șirul de numere inițial.
Exemplu 3
- Intrare
- 5 3 1
- Ieșire
- Datele de intrare corespund restricțiilor impuse.
- 6
Explicație
Primele 10
numere 3-prime sunt: 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
, 10
, 11
. Șirul de numere 2
, 11
, 10
, 5
, 3
, 8
, 7
, 9
, 4
, 6
, parcurs din 4
în 4
, va forma în ordine crescătoare șirul de numere inițial.
Exemplu 4
- Intrare
- 3 10 1
- Ieșire
- Datele de intrare nu corespund restricțiilor impuse.
Rezolvare
#2351 Numere 23
def prim3(n):
if n < 2:
return False
d, nr = 2, 0
while n != 1 and nr <= 3:
while n % d == 0 and nr <= 3:
n //= d
nr += 1
d += 1
if n == 1 and nr <= 3:
return True
return False
def cel_mai_mare(n):
res = 1
while n > 0:
res += 1
if prim3(res):
n -= 1
return res
def sir_circular(n, k):
val, poz, nr_n = 1, 1, n
while not prim3(val):
val += 1
vector = [0] * (n + 1)
vector[1] = val
nr_n -= 1
while nr_n > 0:
val += 1
while not prim3(val):
val += 1
nr_k = k
while nr_k > 0:
poz += 1
if poz > n:
poz = poz % n
if vector[poz] == 0:
nr_k -= 1
vector[poz] = val
nr_n -= 1
return " ".join(str(x) for x in v[1:])
def conditii(k, n):
return 0 < k < n <= 10_000
def numere23(c, n, k):
if c == 1:
print(cel_mai_mare(n))
elif c == 2:
print(sir_circular(n, k))
if __name__ == "__main__":
n, k, c = map(int, input().split())
if not conditii(k, n):
print("Datele de intrare nu corespund restricțiilor impuse.")
else:
print("Datele de intrare corespund restricțiilor impuse.")
numere23(c, n, k)