티스토리 뷰
문제 링크: 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}$으로 구하면 되기 때문이다.
이렇게 구했다면 네 제곱수의 합의 가짓수는 구해진거고, 문제는 다섯 제곱수의 합의 가짓수를 구해야하는데 조금만 생각해보자.
$t = 0$부터 시작해서 $n \geq t$를 만족할 때까지 $1$씩 점점 더하면서 $r_4(n-t^{2})$을 구하면 된다. $t = 0$일 때를 제외하면 양수, 음수가 있으니 모두 고려하면 $r_5(n) = r_4(n) + 2\sum_{\substack{t=1 \\ t^2 \leq n}} r_4(n - t^2)$를 계산하면 된다.
시간제한이 5.555초이다보니 폴라드 로가 아닌 일반적인 소인수분해로도 풀어지긴 한다. 물론 시간 퍼포먼스는 5배 가량 차이나지만... 따라서 코드도 일반적인 소인수분해 코드를 올림.
코드
'BOJ' 카테고리의 다른 글
[BOJ][Python] 백준 29537번 - Большая сумма (0) | 2025.06.17 |
---|---|
[BOJ][Python] 백준 8483번 - Earthquake (0) | 2025.06.13 |
골드 이상 풀이 정리 2주차 (0) | 2024.11.05 |
골드 이상 풀이 정리 1주차 (0) | 2024.10.27 |
[BOJ][Python] 백준 32454번 - Fibonacci Lucky Numbers (0) | 2024.10.25 |
- Total
- Today
- Yesterday
- backtracking
- TEXT
- 수학
- BFS
- 정렬
- math
- 브루트포스
- Topological Sorting
- 시뮬레이션
- 위상 정렬
- 최소 신장 트리
- 파이썬
- Python
- 볼록 껍질
- 너비 우선 탐색
- MST
- 다이나믹 프로그래밍
- Simulation
- greedy
- Brute Force
- BOJ
- 구현
- convex hull
- Implementation
- DP
- 그리디
- set
- 집합과 맵
- Sorting
- 백트래킹
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |