반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

코딩하기 좋은날

백준 1644 소수의 연속합 본문

백준(Baekjoon) 문제

백준 1644 소수의 연속합

huiung 2019. 2. 2. 22:53
반응형

문제와 채점은 위 사이트에서 확인 하실 수 있습니다

 

이 문제는 어떤수가 연속된 소수의 합으로 이루어 질 수 있는 경우의 수를 출력하는 문제입니다.

 

에라토스테네스의 체를 이용하여 소수들을 판별하고 그 소수를 모두 벡터에 집어넣은 뒤

 

첫번째 소수부터 계속 더해가며 그 숫자가 나오는 배열의 인덱스 값을 증가 시켰습니다.

 

총 범위가 4000000 이고 소수의 개수가 28만개 정도 나와서 시간초과가 날거 같았는데 합이 4000000을 넘으면 의미가 없어지므로 탈출하는 조건을 넣어 주어서 그런지 통과가 되었습니다.

 

다음은 코드입니다.

 

#include <iostream>
#include <vector>

#define MAX 4000001

using namespace std;

int main(void) {
	ios_base::sync_with_stdio(false); cin.tie(NULL);
	int *prime = new int[MAX];
	fill_n(prime, MAX, 1);
	vector<int> v;
	int result;
	prime[0] = 0;
	prime[1] = 0;
	
	for(int i = 2; i < MAX; i++)
		if(prime[i]) {
			v.push_back(i);
			for(int j = i+i; j < MAX; j+=i)
				prime[j] = 0;		
		}
	
	int len = v.size();
	cout << len;
	for(int i = 0; i < len; i++) {
		result = v[i];
		for(int j = i+1; j < len; j++) {
			result += v[j];
			if(result > 4000000)
				break;
			
			prime[result]++;
			
		}
	}
	
	int N; cin >> N;
	cout<<prime[N];
	
	return 0;
	
}
반응형

'백준(Baekjoon) 문제' 카테고리의 다른 글

백준 1182 부분집합의 합  (0) 2019.02.03
백준 1747 소수&팰린드롬  (0) 2019.02.02
백준 5568 카드 놓기  (0) 2019.01.31
백준 2896 무알콜 칵테일  (0) 2019.01.29
백준 2909 캔디 구매  (0) 2019.01.29