본문 바로가기
반응형

소수7

[C/C++] 백준 #2023 신기한 소수(수학) N자리 소수중에서 하위자리를 빼나가도 소수가 되는 수들은 상당히 많습니다. 첫자리를 제외하고 나머지는 모두 홀수로 이루어져 있어야 하죠. 물론 5와 같이 10의 소인수인 수는 제외입니다. 이 문제를 풀기 위한 접근은 간단합니다. 1) 초기 시작수 2, 3, 5, 7을 리스트에 넣습니다. 2) 이곳에 1, 3, 7, 9를 붙여서 소수가 된다면 그 수를 리스트에 넣습니다. 3) N자리수가 될때까지 2)를 반복합니다. 이렇게 하면 손쉽게 결과를 출력할 수 있습니다. for 루프 쓸 때, 1, 3, 7, 9만 붙이면 되는데, 그냥 5도 같이 붙였습니다. 크게 성능 이슈가 있지는 않기 때문에, 문제 통과하는데에는 이상이 없었습니다. 제가 작성한 소스입니다 //------------------------------.. 2023. 1. 19.
[C/C++] 백준 #1644 소수의 연속합(수학) 이번 문제는 연속된 소수들의 합을 이 주어진 값으로 표현되면, 그러한 경우의 수를 계산하는 것입니다. 원래는 소수들의 누적합을 이용해서 푸는 것이 좋겠죠. 먼저 n보다 작거나 같은 소수들의 집합을 구합니다. n이 30이라고 한다면 아래와 같은 소수들 리스트를 얻게 됩니다. 2 3 5 7 11 13 17 19 23 29 누적합은 다음과 같이 구할 수 있습니다. 우리는 이 누적합 테이블만 사용하면 됩니다. 2 5 10 17 28 41 58 77 80 109 이 누적합 테이블은 실제 연속된 합을 계산할 때 사용합니다. 제일 먼저 이분탐색을 이용해서 30을 찾습니다. 해당 값은 첫 소수부터 연속된 소수의 합이 30이 되는 경우입니다. 맨 처음 누적합에 0을 넣는다면 이 부분을 생략해도 됩니다. 이제 109부터 .. 2022. 9. 17.
#1456 거의 소수 이번 문제는 소수를 구하는 문제입니다. 난이도는 Silver I 정도로 평가됩니다. 소수를 구하는 방법은 여러가지가 있는데, 일단은 2부터 n까지 숫자중 소수를 구하는 것이라면 \(O(n \sqrt {n} )\) 정도의 알고리즘으로 구할 수 있습니다. 에라토스테네스의 체를 이용하면, 메모리 공간이 좀 들겠지만, 가장 준수한 효율로 소수를 구할 수 있습니다. 거의 소수는 소수 \(p\)에 대해서 \(p^N\) 형태로 표현되는 수를 말합니다. 소수 자체는 거의 소수가 아니므로 실제로 주어진 범위안에서 구할 소수는 \( \sqrt {n} \) 범위입니다. 주어진 범위가 a ~ b 까지이므로 2 ~ b 까지의 거의 소수 개수를 구한 후 2 ~ a-1 까지의 거의 소수 개수를 빼주면 됩니다. 숫자의 범위가 \(1.. 2022. 8. 11.
#1017 소수쌍(네트워크 플로우) 처음 이 문제를 접했을 때에는 '혹시 쌍둥이 소수' 문제일까 하고 봤었네요. 소수쌍이 아니라 합이 소수가 되는 숫자들의 합 이야기입니다. 짝수인 N개가 주어지면, 합이 소수가 되는 쌍으로 모두 묶을 수 있다면, 첫번째 수와 묶일 수 있는 수들의 리스트를 내는 문제입니다. 난이도는 Platinum III이지만, 난이도보다는 쉬운 문제입니다. 물론 네트워크 플로우 알고리즘을 알고 있을 때에 한합니다. DFS 알고리즘으로도 풀 수 있지만, 그렇게 하면 시간초과가 납니다. 아래는 해당 문제의 링크입니다. https://www.acmicpc.net/problem/1017 1017번: 소수 쌍 지민이는 수의 리스트가 있을 때, 이를 짝지어 각 쌍의 합이 소수가 되게 하려고 한다. 예를 들어, {1, 4, 7, 10.. 2019. 12. 24.
[C/C++] 프로젝트 오일러 #72 분수 세기(수학) 이번 문제는 분수를 세는 문제입니다. 해당 문제는 아래 링크입니다. https://projecteuler.net/problem=72 Problem 72 - Project Euler Consider the fraction, n/d, where n and d are positive integers. If n projecteuler.net 이 문제는 분모의 범위가 정해졌을 때, 기약분수로 표현할 수 있는 분수는 총 몇개인가에 대한 문제입니다. 모든 경우를 다 따져서 기약분수로 만들어서 겹치는 것 제외하면 되겠다고 생각할 수 있지만, 이것이 생각처럼 쉽지 않습니다. \(d \leq 8\)인 분모 d를 갖는 기약분수는 다음과 같습니다. 1/8 3/8 5/8 7/8 1/7 2/7 3/7 4/7 5/7 6/7 1/6.. 2019. 12. 20.
51. 프로젝트 오일러 #51 : 소수 자릿수 대치 프로젝트 오일러 #51 문제는 처음으로 난이도 5%가 아닌 문제입니다. 다른 문제들에 비해서 난이도가 좀 있습니다. 주어진 문제는 56xx3 과 같은 x로 비어진 숫자가 있는데, 이 x에 0~9까지 숫자를 넣었을 때, 소수는 몇개가 나오는 가입니다. 56003, 56113, 56223, 56333, 56443, 56553, 56663, 56773, 56883, 56993 이라는 10개의 숫자들을 만들 수가 있는데요. 이 중 소수는 7개나 됩니다. 이 때, 56003(이 그룹 중 가장 작은 수)는 소수가 7개가 되는 최소의 수입니다. 찾아야 하는 수는 소수가 8개가 되는 최소의 수입니다. 문제를 적용하는 방법을 구상하는 것이 어렵지, 문제 자체는 짧은 시간에 컴퓨터가 계산해냈습니다. 저는 기본적으로 자기호.. 2016. 6. 8.
728x90