반응형
https://www.acmicpc.net/problem/11815
#문제 간단 정리
수학과 관찰이 필요한문제
#문제 해결 방법
우선 약수의개수가 홀수이려면 완전제곱수여야 한다 (어떤 수의 제곱이 되는 수 )
완전제곱수를 쉽게 확인하는 방법은
루트를 씌었다가 다시 제곱을해서 원래의 수가 되는지 확인 하는 것
문제에서 X의 최대값이 10^18 이기 때문에
뭐 대략 long double 사용하면 18자리정도 유효숫자를 표현할 수 있는데
10^18 에 루트를 씌우면 10^9 이기 때문에 충분히 표현 가능하다
그래서 루트X가 정수인지는 판단에 문제가 없다
만약 이렇게 풀지 않는다면 이진탐색을 사용하면 되긴 할거다
#전체 코드
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N;
cin >> N;
while (N--) {
long long X;
cin >> X;
long long r = (long long)floorl(sqrtl((long double)X));
if (r * r == X) {
cout << 1 << " ";
}
else {
cout << 0 << " ";
}
}
cout << "\n";
return 0;
}
반응형
'[백준] > C++' 카테고리의 다른 글
백준 12924번 멋진 쌍[C++] (0) | 2025.01.01 |
---|---|
백준 21396번 이진수 더하기 [C++] (1) | 2025.01.01 |
백준 3005번 크로스워드 퍼즐 찾아보기 [C++] (0) | 2025.01.01 |
백준 3671번 산업 스파이의 편지 [C++] (0) | 2024.12.29 |
백준 32864번 지나칠 수 없는 지하철 게임 [C++] (0) | 2024.12.18 |