language: Pascal (gpc) (gpc 20070904)
date: 109 days 23 hours ago
link:
visibility: public
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Program M_POWER;
 var a, b, c, b1, c1: array[ 1..100, 1..100 ] of integer;
     Ia, i, j, k, n: integer;
begin
 readln( Ia );                                          { Количество строк }
 for i:= 1 to Ia do
  begin 
   for j:= 1 to Ia do
    read( a[ i, j ] );
   readln;
  end;                                                  { Сама матрица }
 readln( n );                                           { Степень } 
 
 for i:= 1 to Ia do
  for j:= 1 to Ia do
   c[ i, j ]:= a[ i, j ];                               {C = A }
 for i:= 1 to Ia do
  for j:= 1 to Ia do
   if i = j then
    b[ i, j ]:= 1
   else b[ i, j ]:= 0;                                  { B - еденичная матрица }
  
  while n <> 0 do
   if n mod 2 = 0 then
    begin
     n:= n div 2;
     for i:= 1 to Ia do
      for j:= 1 to Ia do
       for k:= 1 to Ia do
        c1[ i, j ]:= c1[ i, j ] + c[ i, k ] * c[ k, j ];
     for i:= 1 to Ia do
      for j:= 1 to Ia do
       begin
        c[ i, j ]:= c1[ i, j ];
        c1[ i, j ]:= 0;
       end;
    end
   else
    begin
     n:= n - 1;
     for i:= 1 to Ia do
      for j:= 1 to Ia do
       for k:= 1 to Ia do
        b1[ i, j ]:= b1[ i, j ] + b[ i, k ] * c[ k, j ];
     for i:= 1 to Ia do
      for j:= 1 to Ia do
       begin
        b[ i, j ]:= b1[ i, j ];
        b1[ i, j ]:= 0;
       end;
    end;
  for i:= 1 to Ia do
   begin
    for j:= 1 to Ia do       
     writeln( b[ i, j ], ' ' );
    writeln;
   end;
end.