백준 10830 c++
#include <iostream>
using namespace std;
long long int temp[5][5];
long long int result[5][5];
long long int A[5][5];
long long int N;
long long int input(long long int lower, long long int upper)
{
//cout << "input()" << endl;
long long int A;
while (1)
{
cin >> A;
if (A >= lower && A <= upper)
{
break;
}
else
{
;
}
}
return A;
}
void input_arr(long long int arr[5][5])
{
int i, j;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
arr[i][j] = input(0, 1000);
}
}
return;
}
void pow_matrix(long long int a[5][5], long long int b[5][5])
{
int i, j, k;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
temp[i][j] = 0;
for (k = 0; k < N; k++)
{
temp[i][j] = temp[i][j] + (a[i][k] * b[k][j]);
}
temp[i][j] = temp[i][j] % 1000;
}
}
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
a[i][j] = temp[i][j];
}
}
return;
}
void print_result(long long int arr[5][5])
{
int i, j;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
cout << arr[i][j] << " ";
}
cout << "\n";
}
}
void find_result(long long int B)
{
int i,j;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
result[i][j] = 0;
}
result[i][i] = 1;
}
while (B > 0)
{
if (B % 2 == 1)//B가 홀수
{
pow_matrix(result, A);
}
else
{
;
}
pow_matrix(A, A);
B = B / 2;
}
//결과 출력
print_result(result);
return;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
long long int B;
N = input(2, 5);
B = input(1, 100000000000);
input_arr(A);
find_result(B);
return 0;
}