문제 링크: https://www.acmicpc.net/problem/28383문제 풀이소인수분해, 정수론 네 제곱수의 합의 가짓수를 구하는 방법은 Jacobi's four-square theorem를 이용하면 된다.간략하게 설명하면 $r_4(n)$이 $n$의 네 제곱수의 합의 가짓수를 구하는 함수인데,$n$이 홀수라면 $8\sigma(n)$를 구하면 되고, $n$이 짝수라면 $ n = 2^{k}m$으로 나타낼 때, $24\sigma(m)$을 구하면 된다.당연하겠지만 $\sigma(n)$를 구하기 위해서 소인수분해가 들어간다. $n = p_1^{q_1}p_2^{q_2}p_3^{q_3}\cdots p_k^{q_k}$으로 나타내면 $\prod_{i=1}^k \frac{p_i^{q_i + 1} - 1}{p_i..
이게 무슨 의미냐면, 먼저 $1$부터 $N$까지의 합부터 생각해보자. $\sum\limits_{i=1}^{n} i$는 간단하게 $\frac{n(n+1)}{2}$로 쓸 수 있다. 그러면 이 값에 다시 시그마를 붙이면? $\sum\limits_{i=1}^{n} \frac{i(i+1)}{2}$이 된다. 이 값은 무엇일까? 일단은 그냥 식 정리를 해보자. $\frac{1}{2} \sum\limits_{i=1}^{n} (i^{2}+i)$로 바꿔 쓸 수 있고, $ \sum\limits_{i=1}^{n} i^{2} = \frac{n(n+1)(2n+1)}{6} $이므로 $\frac{1}{2} (\frac{n(n+1)(2n+1)}{6} + \frac{n(n+1)}{2})$가 된다.$\frac{n(n+1)(2n+1)}{..
한 줄 요약: $N \geq 3$부터 합성수다. $1$부터 $N$까지의 합은 간단하게 $S(N) = \frac{N(N+1)}{2}$로 나타낼 수 있다. 합성수는 소수와 소수의 곱 혹은 소수와 합성수의 곱 혹은 합성수와 합성수의 곱이다. 1. $N$이 $1$이라면 $S(1) = 1$이므로 이는 소수도 아니고 합성수도 아니다.2. $N$이 $2$라면 $S(2) = \frac{2 \times 3}{2} = 1 \times 3$이므로 소수다.3. $N$이 $3$보다 크거나 같다면 $S(N) = \frac{N(N+1)}{2}$에서 $N$은 $3$보다 크거나 같고 $N+1$도 $4$보다 크거나 같다. 이는 둘 중에 하나가 짝수여서 $2$로 나누어떨어진다고 가정했을 때, $N = 2$와 같이 $1$이 되지 않는다. ..
한 줄 요약: $N$이 제곱수이거나 제곱수를 $2$로 나눈 값이라면 양의 약수의 합은 홀수고 아니라면 짝수다.($16(4^{2})$, $72(\frac{12^2}{2})$, $\cdots$ 등은 홀수, $19$, $34$, $\cdots$ 등은 짝수) $N$이 주어졌을 때 양의 약수의 합이 무엇이냐고 한다면, 직접 약수를 구해서 합을 더해 줄 수 있다. 그리고 그 값이 홀수인지 짝수인지 판단 해볼수 있다. 그렇다고 이 방식이 컴퓨터로 계산했을 때 $10^{18}$ 스케일 정도까지는 폴라드 로 알고리즘을 사용한다면 엄청 느리거나 하지 않는다. 하지만 우리는 $N$을 이렇게도 나타낼 수도 있다. $N = p_{1}^{q_{1}} p_{2}^{q_{2}} \cdots p_{n}^{q_{n}} $ (단, $p_..
1. 숫자 연결하기 (BOJ 1323)pigeonhole principle 언제 한번 순환소수 구할 때 나눗셈을 해본 적이 있다면 좋은 아이디어를 떠올릴 수 있다.1. 수를 계속 추가하면서(순환소수라면 0이었고, 이 문제에서는 N이다.) K로 나눠서 나머지를 알아낸다. 그후 그 나머지+N(여기선 문자열 연산이라 생각)을 다시 합쳐서 K로 나눈다.2. 계속 하다보면 언젠가 반복되었다.즉, 예제를 생각해보면 2%9=2 -> 22%9 -> 42%9 -> 62%9 -> ... 이런 식으로 계속 연산해준다. K로 나눈 나머지는 반드시 0~K-1이므로 비둘기집 원리에 따라 최대 K번 안에 반복된다. 같은 나머지가 나왔는데도 나머지가 0으로 안 나온다면 영원히 못 나누므로 -1을 출력하고 아니면 횟수를 출력하면 된다..
1. 동전 (BOJ 9084)dp, knapsack 동전 하나를 잡고 그 동전의 값 이상부터 n까지 이전 값을 불러오면 된다. 당연히 0원은 무조건 만들 수 있으니 1로 초기화 해서 시작하면 된다. 2. 겹치는 선분 (BOJ 1689)sweeping, sorting imos법 같이 돌리면 된다. 즉, 시작 점은 1로 두고, 끝 점은 -1로 둬서 점의 위치를 중심으로 정렬해준다.예를 들어 (1, 5), (3, 6), (2, 3)가 있으면 (1, 1), (2, 1), (3, -1), (3, 1), (5, -1), (6, -1)로 될 것이다. 그리고 좌표 하나하나씩 순서대로 확인해서 변수에 +1, 혹은 -1을 하고 최댓값을 갱신하면 된다. 당연히 -1이 1보다 작으므로 먼저 계산되기 때문에 '선분의 끝 점에서..
문제 링크: https://www.acmicpc.net/problem/32454 문제 풀이피사노 주기, 오일러 피 함수, 분할 정복을 이용한 거듭제곱 일단 $7^{7^{7^n}}$을 먼저 보면 벌써부터 답이 없어지는데, 이 수는 매우 크기 때문에 사실상 직접 구하는 것은 불가능하다. 그래서 접근하기가 힘든데, $7^{7^{7^n}}$번째 피보나치 수를 $10$번째 자리까지 출력하라고 적혀있다. 이 말은 피보나치 수를 구했을 때 $10^{10}$으로 나눈 값만 구하면 된다. 그렇다면 여기서 떠올리는 게 있다면 쭉쭉 풀려질 것이다. 피사노 주기를 이용하면 된다. 피보나치 수에서 나누는 값이 $10^{m} (m > 2)$라면 주기는 $15 \times 10^{m-1}$다. $m = 10$이므로 주기는 $15 ..
문제 링크: https://www.acmicpc.net/problem/32242문제 풀이폴라드 로, 정수론 처음에는 서브테스크로 나눠서 생각을 해봤는데, $A$가 0이냐 0이 아니냐를 기준으로 나눠서 생각했다. 생각해야할 케이스가 매우 많으므로 천천히 생각해봐야 한다. 1. $A=0$인 경우1-1. $B \neq 0$, $C \neq 0$ 인 경우$Bx+Cy+D=0$의 형태가 되는데 베주 항등식이 떠오를 것이다. 정수 해가 무한히 존재하는 지 혹은 없는지에 대해 알 수 있다.$GCD(B, C) = X$라 하고, 베주 항등식에 따르면 $X$가 $D$의 배수이면 정수인 $x, y$가 무수히 많기 때문에, 이를 판별해서 구하면 된다. 1-2. $B = 0$, $C \neq 0$ 인 경우$Cy+D=0$이 되고,..
- Total
- Today
- Yesterday
- backtracking
- 볼록 껍질
- 너비 우선 탐색
- Topological Sorting
- 집합과 맵
- 그리디
- 파이썬
- 다이나믹 프로그래밍
- 시뮬레이션
- Simulation
- Implementation
- 구현
- 수학
- 백트래킹
- Brute Force
- DP
- greedy
- MST
- Python
- BOJ
- 정렬
- BFS
- convex hull
- Sorting
- TEXT
- 위상 정렬
- set
- math
- 브루트포스
- 최소 신장 트리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |