Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
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
Archives
Today
Total
관리 메뉴

Life Engineering

[BOJ 1644] 소수의 연속합 (Java) 본문

Problem Solving

[BOJ 1644] 소수의 연속합 (Java)

흑개 2022. 4. 4. 22:40

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

 

1644번: 소수의 연속합

첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000)

www.acmicpc.net

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main_BOJ_1644 {
	static int N;
	static int[] isPrime;
	static ArrayList<Integer> primes=new ArrayList<>();
	static int answer=0;
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		N=Integer.parseInt(br.readLine());
		isPrime=new int[N+1];
		for (int i = 2; i <= N; i++) {
			isPrime[i]=i;
		}
		for (int i=2; i<=N; i++) {
			if (isPrime[i]==0) continue;
			for (int j=i+i; j<=N; j+=i) {
				isPrime[j]=0;
			}
		}
		for (int i = 2; i <= N; i++) {
			if (isPrime[i]!=0) {
				primes.add(i);
			}
		}
		int start=0;
		int end=0;
		int partialSum=0;
		int len=primes.size();
		while (true) {
			if (partialSum>=N) {
				partialSum-=primes.get(start++);
			}
			else if (end==len) {
				break;
			}
			else {
				partialSum+=primes.get(end++);
			}
			if (partialSum==N) {
				answer++;
			}
		}
		System.out.println(answer);

	}

}

에라토스테네스의 체 + 투 포인터 문제.