성원이는 다이어트를 시도중이다. 성원이는 정말 정말 무겁기 때문에, 저울이 부셔졌다.
성원이의 힘겨운 다이어트 시도를 보고만 있던 엔토피아는 성원이에게 새로운 저울을 선물해 주었다.
성원이는 엔토피아가 선물해준 저울 위에 올라갔다. “안돼!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! G 킬로그램이나 더 쪘어ㅜㅠ”라고 성원이가 말했다. 여기서 말하는 G킬로그램은 성원이의 현재 몸무게의 제곱에서 성원이가 기억하고 있던 몸무게의 제곱을 뺀 것이다.
성원이의 현재 몸무게로 가능한 것을 모두 출력하는 프로그램을 작성하시오.
첫째 줄에 G가 주어진다. G는 100,000보다 작거나 같은 자연수이다.
첫째 줄부터 한 줄에 하나씩 가능한 성원이의 현재 몸무게를 오름차순으로 출력한다. 가능한 몸무게가 없을 때는 -1을 출력한다. 현재 몸무게는 자연수로 떨어지지 않을 수도 있는데, 이런 경우는 제외해야 한다.
15
4
8
이 문제는 약수를 구해서 풀 수 있었다. 인 방정식이기 때문에 이고 .
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.TreeSet;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int G = Integer.parseInt(br.readLine());
HashSet<Integer> set = new HashSet<>();
TreeSet<Integer> ans = new TreeSet<>(); //오름차순 출력위한 set
for(int i=1; i<=Math.sqrt(G); i++) {
if(G%i==0) { //자연수인 약수
set.add(i);
}
}
for(int num : set) {
if((num+(G/num))%2==0 && num!=(G/num)) {
int sum = (num+(G/num))/2;
ans.add(sum);
}
}
if(ans.size()==0)
System.out.println(-1);
else {
for(int answer : ans)
System.out.println(answer);
}
}
}