본문 바로가기

정수론35

[백준] 1407번 : 2로 몇 번 나누어질까 (C++) 1407번 : 2로 몇 번 나누어질까 문제) 자연수 N이 주어지면, 자연수를 유지하면서 N을 2로 몇 번까지 나눌 수 있는지를 생각해 볼 수 있다. 즉, N의 모든 약수 중 2의 거듭제곱 꼴이면서 가장 큰 약수를 생각하는 것이다. 예를 들어 15의 경우는 2로 한 번도 나눌 수 없으므로 2^0 = 1이 해당되고, 40의 경우는 2로 세 번까지 나눌 수 있으므로 2^3 = 8이 해당된다. 이러한 약수를 함수값으로 가지는 함수 f(x)를 정의하자. 즉, f(15) = 1이고, f(40) = 8이다. 두 자연수 A, B(A≤B)가 주어지면, A 이상 B 이하의 모든 자연수에 대해서, 그 자연수의 모든 약수 중 2의 거듭제곱 꼴이면서 가장 큰 약수들의 총 합을 구하는 프로그램을 작성하시오. 즉 아래와 같은 수식.. 2024. 1. 16.
[백준] 23888번 : 등차수열과 쿼리 (C++) 23888번 : 등차수열과 쿼리 문제) 등차수열은 연속하는 두 항의 차이가 일정한 수열을 뜻한다. 연속한 두 항 중 뒷항에서 앞항을 뺀 값을 공차라고 한다. 초항이 �$a$이고 공차가 �$d$인 등차수열이 주어진다. 수열의 i번째 원소를 Ai라 할 때, 다음 쿼리를 수행하는 프로그램을 작성하시오. 1 l r : Al, A{l+1}, ... , Ar의 합을 출력한다. 2 l r : Al, A{l+1}, ... , A_r의 최대공약수를 출력한다. 이는 Al, A{l+1}, ... , A_r의 공통된 약수 중 가장 큰 양의 정수를 뜻한다. 입력 : 첫째 줄에 수열의 초항 a와 공차 d가 주어진다. 둘째 줄에는 쿼리의 개수 q가 주어진다. 셋째 줄부터 q개의 줄에는 쿼리가 한 줄에 하나씩 주어진다. 출력 : 각.. 2024. 1. 16.
[백준] 2247번 : 실질적 약수 (C++) 2247번 : 실질적 약수 문제) 두 자연수 A와 B가 있을 때, A = BC를 만족하는 자연수 C를 A의 약수라고 한다. 모든 자연수 N은 1과 자기 자신(N)을 약수로 갖게 된다. 실질적 약수(actual divisor)라는 것이 있다. 자연수 N의 약수들 중에서 1과 자기 자신(N)을 제외한 약수를 실질적 약수라고 한다. 따라서 6의 실질적 약수는 2, 3이며, 13의 실질적 약수는 없다. SOD(Sum Of Divisor)라는 함수를 정의하자. SOD(n)은 정수 n의 모든 실질적 약수의 합을 가리킨다. 따라서 SOD(6) = 5이며, SOD(13) = 0이다. 한편, CSOD(Cumulative SOD)라는 함수도 정의해 볼 수 있다. CSOD(n)은 SOD(1) + SOD(2) + … + SO.. 2024. 1. 16.
[백준] 2436번 : 공약수 (C++) 2436번 : 공약수 문제) 어떤 두 자연수에 공통인 약수들 중에서 가장 큰 수를 최대공약수라고 하고, 두 자연수의 공통인 배수들 중에서 가장 작은 수를 최소공배수라고 한다. 예를 들어, 두 자연수 12와 90의 최대공약수는 6이며, 최소공배수는 180이다. 이와 반대로 두 개의 자연수 A, B가 주어졌을 때, A를 최대공약수로, B를 최소공배수로 하는 두 개의 자연수를 구할 수 있다. 그러나, 이러한 두 개의 자연수 쌍은 여러 개 있을 수 있으며, 또한 없을 수도 있다. 예를 들어, 최대공약수가 6이며 최소공배수가 180인 두 정수는 위의 예에서와 같이 12와 90일 수도 있으며, 30과 36, 18과 60, 혹은 6과 180일 수도 있다. 그러나, 최대공약수가 6이며 최소공배수가 20인 두 자연수는 .. 2024. 1. 14.