티스토리 뷰

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

 

1644번: 소수의 연속합

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

www.acmicpc.net

소수 + 투포인터 

 

이전의 부분합 문제랑 같은 문제

const fs = require('fs');
const N = +fs.readFileSync("./dev/stdin").toString().trim()


const prime = new Array(N + 1).fill(true);
prime[0] = false;
prime[1] = false;


for (let i = 2; i * i <= N; i++) {
  if (prime[i]) {
    for (let j = i * i; j <= N; j += i) {
      prime[j] = false
    }
  }
}
const nums = [];
prime.forEach((v, i) => {
  if (v) {
    nums.push(i)
  }
})


let start = 0;
let end = 0;
let sum = nums[0];
let answer = 0;

while (start < nums.length) {
  if (sum == N) {
    answer++;
    sum -= nums[start];
    start++;
  }
  else if (sum > N) {
    sum -= nums[start];
    start++;
  }
  else {
    end++;
    if (end == N) {
      break;
    }
    sum += nums[end]
  }
}

console.log(answer)
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함