알고리즘 문제
[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;
}
}