3912 - PermPrimeVec
Cerința[edit | edit source]
Se dă o mulțime cu n elemente, numere naturale. Afișați în ordine lexicografică toate permutările mulțimii date în care nu există două elemente prime alăturate.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n și apoi n numere naturale, reprezentând elementele mulțimii.
Date de ieșire[edit | edit source]
Programul va afișa pe ecran permutările cerute, câte una pe fiecare rând și având elementele separate prin câte un spaţiu.
Restricții și precizări[edit | edit source]
- 1 < n ≤ 11
- numărul valorilor prime din șir va fi aproximativ egal cu cel al valorilor neprime
Exemplu 1[edit | edit source]
- Intrare
5
9 7 1 2 3
- Iesire
2 1 3 9 7
2 1 7 9 3
2 9 3 1 7
2 9 7 1 3
3 1 2 9 7
3 1 7 9 2
3 9 2 1 7
3 9 7 1 2
7 1 2 9 3
7 1 3 9 2
7 9 2 1 3
7 9 3 1 2
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> import itertools
def is_prime(num):
if num < 2: return False for i in range(2, int(num ** 0.5) + 1): if num % i == 0: return False return True
def read_input():
n = int(input().strip()) elements = list(map(int, input().strip().split())) return n, elements
def write_output(permutations):
for perm in permutations: print(" ".join(map(str, perm)))
def has_no_consecutive_primes(perm):
for i in range(len(perm) - 1): if is_prime(perm[i]) and is_prime(perm[i + 1]): return False return True
def generate_permutations(n, elements):
all_permutations = sorted(itertools.permutations(elements)) valid_permutations = [perm for perm in all_permutations if has_no_consecutive_primes(perm)] return valid_permutations
def main():
n, elements = read_input()
if not (1 < n <= 11): raise ValueError("n trebuie să fie între 1 și 11")
if len(elements) != n: raise ValueError("Numărul de elemente trebuie să fie egal cu n.")
permutations = generate_permutations(n, elements) write_output(permutations)
if __name__ == '__main__':
main()
</syntaxhighlight>