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;
}
}
'알고리즘 문제' 카테고리의 다른 글
[C/C++ 백준 2381번] 타일 위의 대각선 (Silver 1) (0) | 2020.07.19 |
---|---|
[C/C++ 백준 2381번] 최대 거리 (Gold 5) (0) | 2020.07.19 |
[C/C++ 백준 1334번] 다음 팰린드롬 수 (Silver 3) (0) | 2020.07.18 |
[C/C++ 백준 12021번] 보물찾기 (Silver 1) (0) | 2020.07.17 |
[C/C++ 백준 1817번] 짐 챙기는 숌 (Silver 1) (0) | 2020.07.17 |