리벤지 오브 피타고라스

난이도

Gold 5

인증

문제

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

A2 + B2 = C2

세 변의 길이가 모두 자연수인 직각삼각형 중에 가장 유명한 삼각형은 아래와 같다. A가 주어졌을 때, 빗변의 길이 C가 자연수인 직각삼각형을 만드는 자연수 B (B > A)는 몇 개가 있을까?

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, 자연수 A (2 ≤ A < 220)이 주어진다. 입력의 마지막 줄에는 0이 하나 주어진다.

출력

입력으로 주어진 A에 대해서, 빗변의 길이가 자연수인 직각삼각형을 만드는 B(B>A)의 개수를 출력한다.

예제 입력

3
12
2
1048574
1048575
0

예제 출력

1
2
0
1
175

해설 및 후기

주어진 a(코드에서는 n)애 대한 제곱수의 약수를 구하여, C^2-B^-2 = (C+B)(C-B)를 이용한다. 즉 A^2 = (C+B)(C-B)이므로 구한 약수 중 조건에 맞고, B>A인 케이스를 구하여 답을 구한다.

제출 코드

n = int(input())
while(n != 0):
    a = n**2
    cnt = 0
    for i in range(1,n+1):
        if(a%i == 0):
            m1 = i
            m2 = a // i
            if(m2-m1) // 2 > n and (m1-m2) % 2 == 0:
                cnt += 1
    print(cnt)
    n = int(input())