뜌릅

Sum of Consecutive Prime Numbers(소수의 연속합) 1644번 [백준] 본문

카테고리 없음

Sum of Consecutive Prime Numbers(소수의 연속합) 1644번 [백준]

TwoCastle9 2021. 11. 4. 23:49
반응형

소수의 연속합 문제입니다. 이번에도 Point to Point을 사용하여 소수의 연속합을 구하였습니다.

소수는 4000000까지 범위까지를 에라토스테네스의 체를 사용하여 구하였습니다.

 

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define fast_io ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
typedef long long ll;

int primeNum[4000001];
vector<ll> prime;

void primeNumberSieve()
{
    int number = 4000000;
    for (int i = 2; i <= number; i++)
    {
        primeNum[i] = 1;
    }

    for (int i = 2; i <= sqrt(number); i++)
    {
        if (primeNum[i] == 0)
            continue;
        for (int j = i + i; j <= number; j += i)
            primeNum[j] = 0;
    }
	ll sum = 0;
    prime.push_back(0);//2,3,5등이 제대로 출력이 안됨.
	for (int i = 2; i < 4000001; i++) {
	
		if (primeNum[i] != 0) {
			sum += i;
			prime.push_back(sum);
		}
	}
}
int main() {

	fast_io;
	int n;
	cin >> n;
	
	primeNumberSieve();
	int left = 0, right = 0, result = 0;
	while (left <= right && right < prime.size()) {
		if (prime[right] - prime[left] > n) {
			left++;
		}
		else if (prime[right] - prime[left] < n) {
			right++;
		}
		else if (prime[right] - prime[left] == n) {
			right++;
			result++;
		}
	}
	cout << result;
    return 0;
}

https://www.acmicpc.net/problem/1644

반응형