https://www.acmicpc.net/problem/1016
에라스토테네스의 체
제곱수의 배수들을 제외시켜둔다
#include <iostream>
#include <vector>
using namespace std;
int check[1000001];
vector<long long int> squareNumber;
int main()
{
long long int min, max;
cin >> min >> max;
for (long long int i = 2; i*i <= max; i++)
{
squareNumber.push_back(i*i);
}
long long int ret = 0;
for (long long int i = 0; i < squareNumber.size(); i++)
{
for (long long int j = (min / squareNumber[i])*squareNumber[i]; j <= max; j += squareNumber[i])
{
if (j - min < 0)continue;
if (check[j - min] == 0) {
check[j - min] = 1;
ret++;
}
}
}
cout << max - min + 1 - ret << endl;
}
'알고리즘 문제 풀이' 카테고리의 다른 글
[백준] 수열의 합 - 복습 (0) | 2021.01.31 |
---|---|
[백준] 체스판 다시 칠하기 - 복습 (0) | 2021.01.31 |
[백준] - 수열 정렬 - 복습 (0) | 2021.01.31 |
[백준] - Contact - 복습 (0) | 2021.01.31 |
[백준] - 유기농 배추 - 복습 (0) | 2021.01.31 |
댓글