๐๏ธ ๊ฒช์ ๋ฌธ์
- 5 * 5 * 100,000,000,000 = 2์กฐ5์ฒ์ต๋ฒ์ ์ ๊ณฑ์ฐ์ฐ...
- 1์ต๋ฒ์ด 1~2์ด๋๊น 1์กฐ๋ฒ์ ์ฐ์ฐ์ด๋ฉด 10000~20000์ด์(์๊ฐ์ด๊ณผ๊ฐ ์๋๋๊ฒ ์ด์)
๐ ํด๊ฒฐ ๋ฐฉ๋ฒ
- ์ง๊ธ์ ๊ณ์ ์๋ณธ ํ๋ ฌ๋ง ๊ณฑํ๋๋ฐ a2 * a = a3.. ์ด๋ฐ ์์ผ๋ก ์๋ณธ ํ๋ ฌ์ ์ ๊ณฑ๋ผ๋ฆฌ ๊ณฑํ๋ ๋ฐฉ์์ ์ด์ฉํ๋๊ฑด ์ด๋จ๊น?
- ๋จ, 2์ ์ ๊ณฑ์๊ฐ ์๋ 5์ ๊ฐ์ ์๋ฉด a2 * a2 * a๋ผ๋ ๊ฑธ ์ด๋ป๊ฒ ๊ณ์ฐํด์ ๊ตฌํ์ง? log์ฐ์ฐ์ ํด์ผํ๋๊ฑด๊ฐ?
- 10์ด๋ฉด a4 * a4 * a2
- 2์กฐ 5์ฒ์ต์ 2์ 42์ ๊ณฑ์ด๋ผ๊ณ ํจ. ๊ทธ๋ฌ๋๊น ์ฐ์ฐ ํ์๋ฅผ ์ค์ผ ์ ์์ ๊ฒ ๊ฐ์.
๐ ์ฝ๋
#include <iostream>
#include <vector>
using namespace std;
int N;
using Matrix = vector<vector<int>>;
Matrix multiply(Matrix& A, Matrix& B) {
Matrix result(N, vector<int>(N, 0));
for (int i=0; i<N; i++) {
for (int j=0; j<N; j++) {
for (int k=0; k<N; k++) {
result[i][j] = (result[i][j] + A[i][k] * B[k][j]) % 1000;
}
}
}
return result;
}
Matrix power(Matrix A, long long exp) {
if (exp == 1) {
// ๋ชจ๋ ์์๋ฅผ 1000์ผ๋ก ๋๋ ์ค
for (int i=0; i<N; i++) {
for (int j=0; j<N; j++) {
A[i][j] %= 1000;
}
}
return A;
}
Matrix half = power(A, exp / 2);
Matrix result = multiply(half, half);
if (exp % 2 == 1) {
result = multiply(result, A);
}
return result;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
long long B;
cin >> N >> B;
Matrix A(N, vector<int>(N));
for (int i=0; i<N; i++) {
for (int j=0; j<N; j++) {
cin >> A[i][j];
}
}
Matrix answer = power(A, B);
for (const auto& row : answer) {
for (int val : row) {
cout << val % 1000 << ' ';
}
cout << '\n';
}
return 0;
}
๐ ์๊ฐ ์ด๊ณผ๋์๋ ๊ธฐ์กด ์ฝ๋
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int N, B;
cin >> N >> B;
vector<vector<int>> v(N, vector<int>(N, 0));
vector<vector<int>> accuV(N, vector<int>(N, 0));
for (int i=0; i<N; i++) {
for (int j=0; j<N; j++) {
cin >> v[i][j];
accuV[i][j] = v[i][j];
}
}
for (int t=0; t<B - 1; t++) {
vector<vector<int>> newV(N, vector<int>(N, 0));
for (int i=0; i<N; i++) {
for (int j=0; j<N; j++) {
// iํ๊ณผ j์ด ๊ฐ๊ฐ์ ์์์ ๊ณฑ ๋ํ๊ฑฐ
int sum = 0;
for (int k=0; k<N; k++) {
sum += (accuV[i][k] * v[k][j]) % 1000;
// cout << v[i][k] << " * " << v[k][j] << " = " << v[i][k] * v[k][j] << '\n';
}
newV[i][j] = sum % 1000;
}
}
accuV = newV;
}
for (int i=0; i<N; i++) {
for (int j=0; j<N; j++) {
cout << accuV[i][j] << ' ';
}
cout << '\n';
}
return 0;
}'Algorithm > PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [C++] 1525: ํผ์ฆ (0) | 2025.06.24 |
|---|---|
| [C++] 9935: ๋ฌธ์์ด ํญ๋ฐ (0) | 2025.05.13 |
| [C++] 5639: ์ด์ง ๊ฒ์ ํธ๋ฆฌ (0) | 2025.04.30 |
| [C++] 17070: ํ์ดํ ์ฎ๊ธฐ๊ธฐ 1 (0) | 2025.04.16 |
| [C++] 12865: ํ๋ฒํ ๋ฐฐ๋ญ (0) | 2025.04.15 |