알고리즘 문제

[C/C++ 백준 4563번] 리벤지 오브 피타고라스 (Silver 1)

새파란 공대생 2020. 7. 18. 14:26

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

 

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

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

www.acmicpc.net

A^2 = C^2 - B^2 = (C + B)(C - B) = x * y라 하고, A^2의 약수들을 이용해 문제를 해결하자.

A^2의 약수중 C, B를 자연수로 만들고, 작은 수인 B가 A보다 크도록 조건을 설정하면 해결할 수 있다.

코드는 다음과 같다.

 

#include <cstdio>
#include <cmath>
using namespace std;
int Pita(long long int n){
	int ans=0;
	long long int k = n*n;
	for(int i=1; i<=n; i++){
		if(k%i==0){
			if((((k/i+i)/2.0)==(k/i+i)/2 &&
				((k/i-i)/2.0)==(k/i-i)/2) &&
				(k/i-i)/2 > n)
				ans++;
		}
	}
	return ans;
}
int main(void){
	long long int A;
	while(1){
		scanf("%d",&A);
		if(A!=0)
			printf("%d\n",Pita(A));
		else
			break;
	}
}