Coding Test/BaekJoon_C++

백준 4563 <리벤지 오브 피타고라스>

JunOnJuly 2024. 4. 11. 19:47
728x90

https://www.acmicpc.net/problem/4563

 

4563번: 리벤지 오브 피타고라스

피타고라스의 정리는 직각삼각형의 세 변의 관계를 나타내는 정리이다. 빗변의 길이를 C, 다른 두 변의 길이를 A, B라고 한다면 다음과 같은 식으로 쓸 수 있다. A2 + B2 = C2 세 변의 길이가 모두 자

www.acmicpc.net


피타고라스의 직각삼각형 식을 분해해 수를 구해주면 풀 수 있습니다.


#include <iostream>
#include <vector>
#include <array>
#include <algorithm>
#include <cmath>

using namespace std;

int main(void) {
    while (true) {
        // 입력
        long long int A;
        cin >> A;
        // 입력이 0 이면 끝
        if (A == 0) return 0;
        // 카운트
        int cnt = 0;
        // A^2 + B^2 = C^2 -> A^2 = (C - B)(C + B)
        // A^2
        long long int pow_A = pow(A, 2);
        // 순회하며 약수 쌍 구하기
        for (long long int i = 1; i <= A - 1; i++) {
            // i 가 약수면
            if (pow_A % i == 0) {
                // (C-B) = i, (C+B) = pow_A/i ( (C-B) < (C+B) , i < pow_A/i )
                // 2B = pow_A/i - i
                // (pow_A/i - i) 가 2의 배수여야 자연수 가능
                // B가 2의 배수고 A 보다 크면
                if ((pow_A / i - i) % 2 == 0 and (pow_A / i - i) / 2 > A) {
                    cnt += 1;
                }
            }
        }
        cout << cnt << "\n";
    }
}

 

728x90