- 다른 소수에 관련된 문제를 푸는 방식과 똑같이 하지만, n보다 크고 2n보다 작은 범위 내의 소수의 개수를 구하는 문제이므로 범위를 수정해야 한다.
- 에라토스테네스의 체의 원리를 이해하고 적용한다.
=> 특정 범위 내의 소수를 찾는데 효율적인 방법
<M부터 N까지의 소수들을 출력>
int M,N;
cin>>M>>N;
vector<int> A(N+1,1);
for(int i=2;i<=sqrt(N);i++){
if(A[i]==1){
for(int j=i*i;j<=N;j+=i){
A[j]=0;
}
}
}
for(int i=M;i<=N;i++){
cout<<A[i]<<" ";
}
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
int main(void){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int num;
while(1){
cin>>num;
if(num==0){
break;
}
int count=0;
vector<int> A(2*num+1,1);
for(int i=2;i<=sqrt(2*num);i++){
if(A[i]==1){
for(int j=i*i;j<2*num+1;j+=i){
A[j]=0;
}
}
}
for(int i=num+1;i<=2*num;i++){
if(A[i]==1){
count++;
}
}
cout<<count<<'\n';
}
return 0;
}
n부터 2n까지이므로 vector의 size도 2 x num + 1이고, 반복문의 범위도 2 x num + 1까지이다.