[백준] 제곱 ㄴㄴ 수 c++
2024. 11. 7. 12:40ㆍ코딩테스트
제곱 ㄴㄴ 수
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 | 512 MB | 69723 | 13993 | 9899 | 22.262% |
문제
어떤 정수 X가 1보다 큰 제곱수로 나누어 떨어지지 않을 때, 그 수를 제곱ㄴㄴ수라고 한다. 제곱수는 정수의 제곱이다. min과 max가 주어지면, min보다 크거나 같고, max보다 작거나 같은 제곱ㄴㄴ수가 몇 개 있는지 출력한다.
입력
첫째 줄에 두 정수 min과 max가 주어진다.
출력
첫째 줄에 min보다 크거나 같고, max보다 작거나 같은 제곱ㄴㄴ수의 개수를 출력한다.
제한
- 1 ≤ min ≤ 1,000,000,000,000
- min ≤ max ≤ min + 1,000,000
#include <iostream>
#include <vector>
using namespace std;
int main()
{
long min, max;
cin >> min >> max;
//min과 max의 길이만큼 vector를 설정
vector<bool> check(max - min + 1);
int count = 0;
//첫번째 for문은 제곱수만큼 돌아가도록 설정.
for (long i = 2; i * i <= max; i++)
{
//현재 제곱수
long pow = i * i;
//제곱수가 처음 등장하는 위치를 min/pow로 가져온다.
//다만, 처음에 등장하는 값이 배수가 아닐 수도 있기 떄문에 아니라면 +1을 해 맞춘다.
long startIndex = min / pow;
if (min % pow != 0)
{
startIndex++;
}
for (long j = startIndex; pow * j <= max; j++)
{
//현재 위치 계산. 배열은 0 부터시작하기에 -min을 해줘야 제대로 된 위치를 가져온다.
int index = (int)(pow * j) - min;
check[index] = true;
}
}
for (int i = 0; i < check.size(); i++)
{
if (false == check[i])
{
count++;
}
}
cout << count;
}
https://www.acmicpc.net/problem/1016
'코딩테스트' 카테고리의 다른 글
[백준] 최소 공배수 c++ (0) | 2024.11.09 |
---|---|
[백준] GCD(n, k) = 1 c++ (1) | 2024.11.08 |
[백준] 소수&팰린드롬 c++ (0) | 2024.11.01 |
[백준] 거의 소수 c++ (0) | 2024.11.01 |
[백준] 소수 구하기 c++ (0) | 2024.11.01 |