본문 바로가기
반응형

수학35

[C/C++] 백준 #2247 실질적 약수(수학) #2247 문제는 주어진 범위안의 1과 자기자신을 제외한 약수들의 합을 계산하는 문제입니다. 문제의 링크입니다. https://www.acmicpc.net/problem/2247 2247번: 실질적 약수 첫째 줄에 CSOD(n)을 1,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 수학에서 약수와 배수는 밀접한 상관관계가 있습니다. \(2 \times 5 = 10 \)이란 식에서 2와 5는 10의 약수이기도 하지만, 10은 2의 배수이고, 10은 5의 배수이기도 합니다. 이 문제는 위의 원리를 잘 이해하는데에서 출발합니다. 문제는 주어진 N에 대해서 1부터 N까지 1과 자기자신을 제외한 약수들의 총 합을 구하라는 문제입니다. 일일이 하나씩 해보면, 1과 소수는 조건에 맞는(실질적).. 2023. 4. 18.
[C/C++] 백준 #2193 이친수(수학, 피보나치 수열) #2193은 수학적 원리를 알고 있으면 쉽게 풀 수 있습니다. 문제의 링크는 다음과 같습니다. https://www.acmicpc.net/problem/2193 2193번: 이친수 0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않 www.acmicpc.net 이친수는 0으로 시작하지 않고, 1이 연속으로 나타나지 않는 수입니다. 이것과 관련해서 제가 쓴 글이 있습니다. https://sdev.tistory.com/319 동전을 n번 던졌을 때, 연속으로 앞면이 나타날 경우의 수는? 이런 경우의 수를 계산하는 것이 쉽지는 않습니다. 어떻게 생각을 해.. 2023. 4. 13.
[C/C++] 백준 #2089 -2진수(수학) 이번 문제는 실제 사용할 일은 거의 없는 -2 진법 이야기입니다. 간혹 수학에서는 마이너스 진법이나 복소수 진법과 관련되어 이야기 되기는 합니다. 대표적으로 \(1+i\)진법 같은 경우가 있습니다. https://www.acmicpc.net/problem/2089 2089번: -2진수 -2진법은 부호 없는 2진수로 표현이 된다. 2진법에서는 20, 21, 22, 23이 표현 되지만 -2진법에서는 (-2)0 = 1, (-2)1 = -2, (-2)2 = 4, (-2)3 = -8을 표현한다. 10진수로 1부터 표현하자면 1, 110, 111, 100, 101, 11010, 110 www.acmicpc.net 문제 자체는 오답을 낼 가능성이 있는 것을 제외하고는 크게 어렵지는 않습니다. 일반적으로 양수 진법이라.. 2023. 3. 28.
[C/C++] 백준 #2086 피보나치 수의 합(분할정복) 이번 문제는 피보나치 수열들의 합을 계산하는 것입니다. 언뜻, 피보나치 수열을 구해서 그 합을 구해야 할 것으로 생각할 수 있습니다. 수학식을 유도하는 것이 어려워서인지, 문제의 난이도는 Gold I 단계입니다. https://www.acmicpc.net/problem/2086 2086번: 피보나치 수의 합 제 1항과 제 2항을 1이라 하고, 제 3항부터는 앞의 두 항의 합을 취하는 수열을 피보나치(fibonacci) 수열이라고 한다. 예를 들어 제 3항은 2이며, 제 4항은 3이다. 피보나치 수열의 a번째 항부터 b번째 www.acmicpc.net 조금 생각해보면, 이 수열도 피보나치 수열과 다르지 않다는 것을 알 수 있습니다. 수학적으로 점화식을 이용해서 풀이를 하는 것이라서, 다소 생소할 수가 있습.. 2023. 3. 28.
[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++] 백준 #2004 조합 0의 개수(수학) 조합을 계산할 때에는 보통 다음의 식을 사용합니다. \[ _nC_r = \frac{n!}{r!(n-r)!} \] 뒤의 0의 개수를 구할 때에는 10의 배수가 몇개나 생기는 가가 중요합니다. 그렇기 때문에 2의 소인수의 개수와 5의 소인수의 개수가 몇개인 가가 중요하게 됩니다. 일반적으로는 2의 소인수의 개수가 더 많지만, 꼭 그렇지는 않습니다. \(_5C_1\)의 경우라면 5의 소인수의 개수는 1개, 2의 소인수의 개수는 0개이니까요. 그래서 소인수를 카운팅할 때, 2의 소인수 개수와 5의 소인수 개수를 같이 카운팅해주어야 합니다. \(n!\)의 경우라면 뒤에 연속으로 나오는 0의 개수를 세기 위해서라면 5의 소인수의 개수를 세면 됩니다. 5로 계속 나눈 몫의 합을 구하면 뒤에 연속으로 나오는 0의 개수.. 2023. 1. 15.
728x90