<풀이>
(a2+b2+m)/(ab)의 값이 정수일때 (a,b)의 개수를 구하는거기 때문에 먼저 식의 값이 정수인지 확인해야한다.
double test = (double)(a*a+b*b+m)/(a*b); -> 식의 값을 실수로 구하고
if(test-(int)test==0.0) -> 식의 값이 정수인지 판별했습니다
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int t = Integer.parseInt(br.readLine());
for (int i = 0; i < t; i++) {
String[] arr = br.readLine().split(" ");
int n = Integer.parseInt(arr[0]);
int m = Integer.parseInt(arr[1]);
int cnt = 0;
for (int a = 1; a-1 < n; a++) {
for (int b = a+1; b < n; b++) {
double test = (double)(a*a+b*b+m)/(a*b); //나누기 결과 정수가 아닌 소수점으로 받아오기
if(test-(int)test==0.0){ // ex) 2.2-2=0.2 (정수아님) , 2.0-2=0.0 (정수)
cnt++;
}
}
}
bw.write(cnt+"\n");
}
bw.close();
}
}
항상 나눈값을 정수로 받아서 몫을 구해오다가 일반 수학처럼 실수로 받아오는 부분이 조금 낯설었지만 검색해서 (double)을 통해서 바꿔주고 실수-정수로 판별하는 방법으로 쉽게 풀 수 있었다. 검색이 없었다면 혼자선 못풀었을거같다
'Algorithm > Java' 카테고리의 다른 글
[알고리즘_Java] 백준 2858번 기숙사 바닥 (0) | 2022.03.19 |
---|---|
[알고리즘_Java] 백준 10974번 모든 순열 (재귀) (0) | 2022.03.12 |
[알고리즘_Java] 백준 2702번 초6 수학 (최소공배수&최대공약수) (0) | 2022.02.28 |
[알고리즘_Java] 백준 5555번 반지 (substring) (0) | 2022.02.25 |
[알고리즘_Java] 백준 17173번 배수들의 합 (HashSet) (0) | 2022.02.19 |