Leetcode Java Sum of Square Numbers
업데이트:
문제
코드
class Solution {
public boolean judgeSquareSum(int c) {
for (int idx = 2; idx * idx <= c; idx++) {
int count = 0;
if (c % idx == 0) {
while (c % idx == 0) {
count++;
c /= idx;
}
if (idx % 4 == 3 && count % 2 != 0) {
return false;
}
}
}
return c % 4 != 3;
}
}
결과
설명
-
음이 아닌 정수 c가 주어졌을 때, $a^2 + b^2 = c$를 만족하는 a와 b가 있는지 검증하는 문제이다.
- 2부터 $idx^2$이 c 이하인 경우까지 idx를 증가시키며 아래를 반복한다.
- count는 c를 idx로 나눈 횟수를 저장할 변수로, 0으로 초기화한다.
- c와 idx를 나눈 나머지가 0인 경우, 아래를 수행한다.
- c와 idx를 나눈 나머지가 0이 될 때 까지 반복하여 count를 증가시키고, c에 c와 idx를 나눈 몫을 저장한다.
- idx와 4를 나눈 나머지가 3이고 count가 홀수인 경우, 주어진 조건을 만족하는 경우가 없으므로 false를 주어진 문제의 결과로 반환한다.
- 반복이 완료되면 c를 4로 나눈 나머지 값이 3이 아닌지를 검증하여 주어진 문제의 결과로 반환한다.
해설
- 페르마의 마지막 정리를 이용한 방법으로 n이 3 이상의 정수일 때, $a^n + b^n = c^n$을 만족하는 양의 정수 a, b, c가 존재하지 않는다.
- 위에 따르면 $4k + 3$ 형태의 모든 n의 소인수가 n의 소인수 분해에서 짝수 제곱을 가질 때에만 숫자 n은 두 제곱의 합이므로, 해당 경우에 대한 값의 검증을 수행하면 아래의 각 경우를 수행한다.
- 반복을 이용하여 c를 4로 나눈 나머지 값이 3이고 짝수 제곱인 경우를 검증하여 먼저 위의 공식에 만족하는 경우를 배제한다.
- 마지막으로 나머지 값인 c를 4로 나눈 나머지 값이 3이면 동일하게 위의 공식에 만족하는 경우이므로 배제하여 검증 결과를 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기