Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.25 KB | None | 0 0
  1. import math
  2.  
  3. def Input():
  4.     N = int(input())
  5.     M = int(input())
  6.     t = []
  7.     global s
  8.     global n
  9.     s = 1
  10.     n = 1
  11.     for i in range(N):
  12.         t += [list(map(int, input().split()))]
  13.     Stage(t)
  14.  
  15. def EP1(m, a, b):
  16.     for i in range(len(m[a])):
  17.         m[b][i] += m[a][i]
  18.  
  19. def EP2(m, a, b):
  20.     global s
  21.     m[a], m[b] = m[b], m[a]
  22.     s *= -1
  23.  
  24. def EP3(m, a, l, i):
  25.     global s
  26.     global n
  27.     if i:
  28.         for i in range(len(m[a])):
  29.             m[a][i] *= l
  30.         s *= l
  31.     else:
  32.         for i in range(len(m[a])):
  33.             m[a][i] //= l      
  34.         n *= l
  35.  
  36. def NOK(a, b):
  37.     n = a*b
  38.     n //= math.gcd(a, b)
  39.     return n
  40.  
  41. def SortM(m):
  42.     Zstr = []
  43.     N = len(m)
  44.     for i in range(N):
  45.         k = Leader(m, i)
  46.         Zstr += [k]
  47.  
  48.     for i in range(N):
  49.         for j in range(N-1):
  50.             if Zstr[j] > Zstr[j + 1]:
  51.                 EP2(m, j, j + 1)
  52.                 Zstr[j], Zstr[j + 1] = Zstr[j + 1], Zstr[j]
  53.  
  54.     return Zstr
  55.  
  56. def PrintM(m):
  57.     N = len(m)
  58.     M = len(m[0])
  59.     for i in range(N):
  60.         print('|', end = ' ')
  61.         for j in range(M):
  62.             print(m[i][j], end = ' ')
  63.         print('|')
  64.        
  65. def L(m, a):
  66.     k = Leader(m, a)
  67.     if k != len(m[a]) and m[a][k] < 0:
  68.         EP3(m, a, -1, 1)
  69.    
  70.     l = max(m[a])
  71.     if l == 0:
  72.         l = 1
  73.     for i in range(k, len(m[a])):
  74.         if math.gcd(m[a][k], m[a][i]) < l and math.gcd(m[a][k], m[a][i]) != 0:
  75.             l = math.gcd(m[a][k], m[a][i])
  76.     EP3(m, a, l, 0)
  77.  
  78.  
  79. def Simply(m):
  80.     N = len(m)
  81.     for i in range(N):
  82.         L(m, i)
  83.     SortM(m)
  84.  
  85. def Terminator(m, i, j):
  86.     N = len(m)
  87.     for k in range(i + 1, N):
  88.         if m[k][j] != 0:
  89.             l = NOK(m[k][j], m[i][j])
  90.             b = 1 * (l // m[k][j])
  91.             a = -1 * (l // m[i][j])
  92.             EP3(m, k, b, 1)
  93.             EP3(m, i, a, 1)
  94.             EP1(m, i, k)
  95.     Simply(m)
  96.          
  97.  
  98. def Leader(m, a):
  99.     N = len(m)
  100.     M = len(m[a])
  101.     k = 0
  102.     j = 0
  103.     while (j < M and m[a][j] == 0):
  104.         k += 1
  105.         j += 1
  106.     return k
  107.  
  108. def Stage(m):
  109.     N = len(m)
  110.     M = len(m[0])
  111.     Simply(m)
  112.     for i in range(N):
  113.         k = Leader(m, i)
  114.         if k != M:
  115.             Terminator(m, i, k)
  116.     print()
  117.     print('Ступенчатый вид:')
  118.     PrintM(m)
  119.  
  120.     r = 0
  121.     while r < N and Leader(m, r) != M:
  122.         r += 1
  123.     print()
  124.     print('rk A = ', r)
  125.     Det(m)
  126.    
  127. def Det(m):
  128.     global s
  129.     global n
  130.     print()
  131.     if len(m) != len(m[0]):
  132.         print('Определителя не существует')
  133.     else:
  134.         k = 1
  135.         for i in range(len(m)):
  136.             k *= m[i][i]
  137.         k *= n
  138.         k //= s
  139.         print('det(A) =', k)
  140.  
  141.  
  142. Input()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement