1644번: 소수의 연속합
첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000)
www.acmicpc.net
package 백준.자바.소수의연속합_1644;
import java.io.*;
import java.util.*;
public class Main {
public void solution() throws Exception {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if(n==1) {
System.out.println(0);
return;
}
boolean[] isPrime = new boolean[n+1];
Arrays.fill(isPrime, true);
isPrime[0] = isPrime[1] = false;
for(int i = 2; i <= Math.sqrt(n); i++){
if(isPrime[i]){
for(int j = i*i; j <= n; j+= i){
isPrime[j] = false;
}
}
}
int count = 0;
long[] d = new long[Math.min(283148, n+1)];
d[1] = 2;
for(int k = 2, i = 3; i < n+1; i++) {
if(isPrime[i]){
d[k] = d[k-1] + i;
k++;
}
}
int lo = 0;
int hi = 1;
while(d[hi] != 0){
long val = d[hi] - d[lo];
if(val < n) hi++;
else if(val > n) lo++;
else {
count++;
hi++;
}
}
System.out.println(count);
}
public static void main(String[] args) throws Exception{
new Main().solution();
}
}
'문제풀이 > 백준' 카테고리의 다른 글
벡터매칭 1007 Java (1) | 2024.02.12 |
---|---|
도서관 1461 Java (1) | 2024.02.12 |
네트워크연결 1922 Java (0) | 2024.02.08 |
최소비용구하기2 11779 Java (0) | 2024.02.08 |
친구네트워크 4195 Java (1) | 2024.02.07 |