1678 - Modif Mat

From Bitnami MediaWiki

Cerinta[edit | edit source]

Se citeşte din fişierul de intrare o matrice pătratică A cu n linii şi n coloane conţinând numere naturale. Scrieţi un program care modifică matricea A în modul următor:

I. interschimbă elementele matricei din triunghiul superior cu cele din triunghiul inferior al matricei. II. după aceea interschimbă elementele superprime distincte, care apar în triunghiul din dreapta cu cel din triunghiul din stânga al matricei (ambele elemente trebuie să fie superprime); Un număr natural n se numeşte superprim dacă printre numerele care pot fi obţinute mutând, pe rând, prima cifră a numărului n şi a celor obţinute pe parcurs, pe ultima poziţie, există cel puţin un număr prim. De exemplu 124 este “superprim” deoarece dintre numerele 241, 412 şi 124, numărul 241 este prim. 15 nu este “superprim” deoarece nici 51, nici 15 nu sunt numere prime.

Date de iesire[edit | edit source]

Fișierul de intrare matrice.in conține pe prima linie numărul n, iar pe următoarele n linii câte n numere naturale reprezentând elementele matricei.

De iesire[edit | edit source]

Fișierul de ieșire matrice.out va conține matricea modificată, câte o linie a matricei pe o linie a fişierului, fiecare element al matricei fiind separat prin câte un spaţiu.

Restrictii si precizari[edit | edit source]

3 ≤ n ≤ 50 1 ≤ ai,j ≤ 2000 Nu se iau în considerare elementele de pe cele două diagonale.

Exemplu[edit | edit source]

matrice.in 4 1 3 4 2 8 1 2 7 124 2 1 32 2 5 6 1 matrice.out 1 5 6 2 8 1 2 7 32 2 1 12 4 2 3 4 1

Explicatii[edit | edit source]

Pentru n=4

şi matricea A=⎢1   3   4   2
               8   1   2   7
              124  2   1   32
               2   5   6   1⎤

, după aplicarea interschimbării de la punctul I. se obţine matricea A=⎡1 5 6 2

                                                                       8   1  2  7
                                                                      124  2  1  32
                                                                       2   3  4  1⎤

, apoi aplicând modificarea de la punctul II. se obţine A=⎡1 5 6 2

                                                          8  1  2  7
                                                         32  2  1  124
                                                          2  3  4  1⎤
(matricea afişată). Observăm că elementele 8 şi 7 nu se schimbă, deoarece 8 nu este superprim, dar 124 şi 32 se schimbă între ele deoarece ambele sunt superprime.

În figura de mai jos, triunghiul superior al matricei este cel marcat cu 1, triunghiul inferior este cel marcat cu 3, triunghiul din stânga este cel marcat cu 2, iar triunghiul din dreapta este cel marcat cu 4.

                                 1  
                             2       4
                                 3

Pentru n=4 , triunghiul superior al matricei Aconţine elementele a12 şi a13,triunghiul inferior conţine elementele a42şi a43, triunghiul stâng conţine elementele a21 şi a31, iar triunghiul drept conţine elementele a24 şi a34.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> 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 generate_superprimes(n):

  superprimes = []
  for i in range(10, 10**n):
      if is_prime(i):
          is_superprime = True
          str_i = str(i)
          for j in range(len(str_i)):
              rotated = int(str_i[j:] + str_i[:j])
              if not is_prime(rotated):
                  is_superprime = False
                  break
          if is_superprime:
              superprimes.append(i)
  return superprimes

def swap_triangles(matrix):

  n = len(matrix)
  
  # I. Interschimbarea elementelor din triunghiul superior cu cele din triunghiul inferior
  for i in range(n):
      for j in range(i + 1, n):
          matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
  
  # II. Interschimbarea elementelor superprime distincte între triunghiul din dreapta și cel din stânga
  superprimes = generate_superprimes(n)
  for i in range(n):
      for j in range(i + 1, n):
          if matrix[i][j] in superprimes and matrix[j][i] in superprimes and matrix[i][j] != matrix[j][i]:
              matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]

Exemplu de utilizare

n = int(input("Introduceți dimensiunea matricei pătratice: ")) matrix = [] print("Introduceți elementele matricei:") for _ in range(n):

  row = list(map(int, input().split()))
  matrix.append(row)

swap_triangles(matrix)

print("Matricea după modificare:") for row in matrix:

  print(row)

</syntaxhighlight>