반응형
Notice
Recent Posts
Recent Comments
Link
뜌릅
Sum of Consecutive Prime Numbers(소수의 연속합) 1644번 [백준] 본문
반응형
소수의 연속합 문제입니다. 이번에도 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;
}
반응형