※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 10357번 문제인 Triples이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/10357
10357번: Triples
The input file contains a single test. The first line of the input file contains the value of \(m\)and the second line contains the value of \(n\).
www.acmicpc.net
페르마의 마지막 정리(Fermat's Last Theorem)을 이용하는 문제이다. 이 정리는 3 이상의 정수 \(n\)에 대하여 \(a^n+b^n=c^n\)을 만족하는 세 양의 정수 \(a\), \(b\), \(c\)가 존재하지 않는다는 내용을 담고 있다. 이 정리의 증명은 매우 어렵지만 그 내용은 널리 알려져있으므로 결과를 잘 알아두자.
위 정리에 따라 \(x\), \(y\), \(z\) 중 적어도 하나가 0이 아니라면 \(j>2\)인 경우 조건을 만족하는 쌍이 하나도 없음을 알 수 있다. 따라서 다음과 같은 모든 경우를 생각하는 것으로 문제를 해결할 수 있다:
(1) \(j=2\)인 경우
(2) \(j>2\)이고 \(x=0\)인 경우
각 경우의 tuple의 개수를 각각 구해 합쳐 문제의 답을 구하자.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int N, M;
int ans;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M;
for (int i = 0; i <= N; i++) {
for (int j = i; j <= N; j++) {
for (int k = j; k <= N; k++) {
if (i * i + j * j == k * k) ans++;
}
}
}
cout << ans + (M - 2) * (N + 1);
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 26090 // C++] 완전한 수열 (0) | 2024.03.29 |
---|---|
[BOJ 10407 // C++] 2 타워 (0) | 2024.03.28 |
[BOJ 14244 // C++] 트리 만들기 (0) | 2024.03.26 |
[BOJ 23128 // C++] Math (0) | 2024.03.25 |
[BOJ 16894 // C++] 약수 게임 (0) | 2024.03.24 |