본문 바로가기

PS/Study

에라토스테네스의 체

반응형

1) 소수간 비교

#include <bits/stdc++.h>
using namespace std;
const int N=1000000;
int cnt=0;
vector<int> p;
int main(){
	p.push_back(2);
	for(int i=3; i<=N; i+=2){
		bool ch=1;
		for(int j=1; j<p.size() && p[j]*p[j]<=i; ++cnt,++j) if(i%p[j]==0) {ch=0; break;}
		if(ch) p.push_back(i), printf("%d %d\n",i,cnt);
	}
	printf("%d",p.size());
}

2) 배열체크

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1000000;
ll cnt=0;
bool v[N+2];
vector<int> p;
int main(){
	p.push_back(2);
	for(ll i=3; i<=N; i+=2){
		if(v[i]) continue;
		printf("%lld %lld\n",i,cnt);
		v[i]=1; p.push_back(i);
		for(ll j=i*i; j<=N; j+=i*2) v[j]=1, cnt++;
		
	}
	printf("%d",p.size());
}

 

아무생각없이 1번으로 짜고 다녔는데

2번이 훨씬 훨씬 더 빠르다.

와!

반응형

'PS > Study' 카테고리의 다른 글

알고리즘별 기본 문제 (수정 예정)  (0) 2021.08.19
카탈란 수 ( Catalan Number )  (0) 2021.08.18
모듈러 인버스 (modulo inverse)  (0) 2021.08.09
N! mod P  (0) 2019.09.20
Lazy Propagation  (1) 2019.05.17