백준 1016 제곱 ㄴㄴ수
2023. 9. 10. 22:59ㆍ알고리즘문제 풀이/백준
문제
어떤 정수 X가 1보다 큰 제곱수로 나누어 떨어지지 않을 때, 그 수를 제곱ㄴㄴ수라고 한다. 제곱수는 정수의 제곱이다. min과 max가 주어지면, min보다 크거나 같고, max보다 작거나 제곱ㄴㄴ수가 몇 개 있는지 출력한다.
입력
첫째 줄에 두 정수 min과 max가 주어진다.
출력
첫째 줄에 min보다 크거나 같고, max보다 작거나 제곱ㄴㄴ수의 개수를 출력한다.
풀이
에라토스테네스의 체를 이용해서 구한다.
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <queue>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
long long min, max;
cin >> min >> max;
long long ans = max - min + 1;
//use the sieve of Eratosthenes
vector<bool> sieve(max - min + 1, false);
for (long long i = 2; i * i <= max; i++) {
long long sNum = min / (i * i);
if (min % (i * i) != 0)
sNum += 1;
while (sNum * (i * i) <= max) {
if (sieve[sNum * (i * i) - min] == false) {
sieve[sNum * (i * i) - min] = true;
ans -= 1;
}
sNum += 1;
}
}
cout << ans;
return 0;
};
'알고리즘문제 풀이 > 백준' 카테고리의 다른 글
| 백준 1065 한수 C++ (0) | 2023.09.11 |
|---|---|
| 백준 1018 체스판 다시 칠하기 C++ (0) | 2023.09.11 |
| 백준 1012 유기능 배추 C++ (0) | 2023.09.09 |
| 백준 1010 다리 놓기 Python (0) | 2023.09.08 |
| 백준 1008 A/B Python (0) | 2023.09.07 |