2024. 5. 15. 23:41ㆍIT/BaekJoon
문제 링크
https://www.acmicpc.net/problem/4690
문제
페르마의 마지막 정리는, a, b, c가 0이 아닌 정수이고, n이 2보다 큰 자연수 일 때, an = bn + cn을 만족하는 자연수 a, b, c가 존재하지 않는다는 정리이다. 이 정리는 아직 증명되지 않았다.
하지만, 완전 세제곱 방정식 a3 = b3 + c3 + d3을 만족하는 1보다 큰 자연수를 찾는 것은 어렵지 않다. (123 = 63 + 83 + 103)
이러한 완전 세제곱 방정식과 a ≤ 100을 만족하는 {a, b, c, d}쌍을 모두 찾는 프로그램을 작성하시오.
입력
이 문제는 입력이 없다.
출력
a값이 증가하는 순서대로 아래 출력 형식과 같이 출력한다. b, c, d도 증가하는 순서로 이루어져야 한다. a값에 해당하는 b, c, d쌍이 여러 개 존재할 수 있다. 이때는 b 값이 작은 것부터 먼저 출력한다.
아래 출력 예제는 일부분만 나와있다.
통과한 답안
namespace _4690
{
internal class Program
{
static void Main(string[] args)
{
for (int a = 1; a <= 100; a++)
{
int aCube = a * a * a;
for (int b = 2; b < a; b++)
{
int bCube = b * b * b;
for (int c = b; c < a; c++)
{
int cCube = c * c * c;
for (int d = c; d < a; d++)
{
int dCube = d * d * d;
if (aCube == bCube + cCube + dCube)
{
Console.WriteLine($"Cube = {a}, Triple = ({b},{c},{d})");
}
}
}
}
}
}
}
}
페르마의 마지막 정리에 관한 문제로
문제를 이해하는건 어렵지 않으나, 구현하는 방법을 접근하기가 애매할 수 있는 문제이다.
이 문제의 가장 큰 조건은 a가 100보다 같거나 작다는 조건과 b < c < d라는 조건이다.
이를 중첩되는 for문을 이용하여 접근할 수 있는데,
위와 같이 a의 범위를 정해주고, 그 속에 b, 그 속에 c, 그 속에 d를 넣는 방식의
4중 for문을 이용하여 작성할 수 있다.(a의 범위가 작으므로 가능한 코드이다)
그 후에 for문의 가장 안쪽에 조건인
을 만족하는지 if문을 사용한다.
이 때, 각각의 if문에서 세제곱을 계산하는 것은 낭비이므로,
각각의 값이 정해지는 for문 안에서 3제곱한 값을 aCube 등으로 선언한 뒤에 비교하게 해주었다.
'IT > BaekJoon' 카테고리의 다른 글
[BAEKJOON] 백준 1356: 유진수 (C#) (0) | 2024.05.19 |
---|---|
[BAEKJOON] 백준 1515: 수 이어 쓰기 (C#) (0) | 2024.05.17 |
[BAEKJOON] 백준 3460: 이진수 (C#) (0) | 2024.05.12 |
[BAEKJOON] 백준 3053: 택시 기하학 (C#) (0) | 2024.05.11 |
[BAEKJOON] 백준 1919: 애너그램 만들기 (C#) (0) | 2024.05.11 |