πŸ•·οΈ Crawler Inspector

URL Lookup

Direct Parameter Lookup

Raw Queries and Responses

1. Shard Calculation

Query:
Response:
Calculated Shard: 143 (from laksa122)

2. Crawled Status Check

Query:
Response:

3. Robots.txt Check

Query:
Response:

4. Spam/Ban Check

Query:
Response:

5. Seen Status Check

ℹ️ Skipped - page is already crawled

🚫
NOT INDEXABLE
βœ…
CRAWLED
1 month ago
πŸ€–
ROBOTS ALLOWED

Page Info Filters

FilterStatusConditionDetails
HTTP statusPASSdownload_http_code = 200HTTP 200
Age cutoffPASSdownload_stamp > now() - 6 MONTH1.9 months ago
History dropPASSisNull(history_drop_reason)No drop reason
Spam/banPASSfh_dont_index != 1 AND ml_spam_score = 0ml_spam_score=0
CanonicalFAILmeta_canonical IS NULL OR = '' OR = src_unparsedio,github!youngyojun,/ s443

Page Details

PropertyValue
URLhttps://youngyojun.github.io/secmem/2022/02/18/sigma-sum-stern-brocot/
Last Crawled2026-02-10 22:35:56 (1 month ago)
First Indexed2022-02-19 00:02:57 (4 years ago)
HTTP Status Code200
Meta TitleStern-Brocot Treeλ₯Ό ν™œμš©ν•œ 수둠적 ν•¨μˆ˜μ˜ ν•© 계산 | Gyojun Youn's PS Blog
Meta Descriptionκ°œμš”
Meta Canonicalio,github!youngyojun,/ s443
Boilerpipe Text
κ°œμš” μ •μˆ˜λ‘ μ—μ„œ 주둜 λ‹€λ£¨λŠ” μ€‘μš”ν•œ 수둠적 ν•¨μˆ˜ λ‘œλŠ” μ•½μˆ˜ ν•¨μˆ˜ $\sigma_k (n)$, 였일러 ν”Ό ν•¨μˆ˜ $\phi (n)$, λ«ΌλΉ„μš°μŠ€ ν•¨μˆ˜ $\mu (n)$ 등이 μžˆλ‹€. μ΄λŸ¬ν•œ ν•¨μˆ˜μ˜ 학문적 μ€‘μš”λ„λŠ” 이루 말할 수 μ—†μœΌλ©°, 컴퓨터과학와 PS 뢄야에도 μ’…μ’… λ“±μž₯ν•  μ •λ„λ‘œ λ‹€μ–‘ν•˜κ²Œ ν™œμš©λœλ‹€. λ³Έ 글은 수둠적 ν•¨μˆ˜μ˜ λŒ€ν‘œμΈ μ•½μˆ˜ ν•¨μˆ˜ $\sigma (n)$의 ꡬ간 합을 효율적으둜 κ³„μ‚°ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ„ μ„œμˆ ν•œλ‹€. ν•¨μˆ˜μ˜ 합을 κΈ°ν•˜μ μœΌλ‘œ ν•΄μ„ν•œ ν›„, 이λ₯Ό Stern-Brocot Tree 자료ꡬ쑰둜 κ³„μ‚°ν•œλ‹€. 이후, 이 μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„ λ³΅μž‘λ„κ°€ $\tilde{O} \left( N^{1/3} \right)$둜 μ•„μ£Ό νš¨μœ¨μ μž„μ„ 보인닀. 문제 제기 μ•½μˆ˜ ν•¨μˆ˜μ˜ ν•© 문제 μ–‘μ˜ μ •μˆ˜ $n$에 λŒ€ν•˜μ—¬, $n$의 λͺ¨λ“  μ–‘μ˜ μ•½μˆ˜μ˜ $k$제곱의 합을 μƒκ°ν•˜μž. 이것이 μ•½μˆ˜ ν•¨μˆ˜ $\sigma_k (n)$의 μ •μ˜μ΄λ‹€. \[\sigma_k (n) := \sum_{ d | n } d^k\] 이 κΈ€μ—μ„œλŠ” $k = 1$인 μ‹œκ·Έλ§ˆ ν•¨μˆ˜ $\sigma (n) := \sigma_1 (n)$에 λŒ€ν•˜μ—¬ 주둜 닀룬닀. 이 값은 $n$의 μ•½μˆ˜μ˜ 합을 λ‚˜νƒ€λ‚Έλ‹€. 이제, μ •μˆ˜ $N$이 μ£Όμ–΄μ‘Œμ„ λ•Œ, 1λΆ€ν„° $N$κΉŒμ§€ μ‹œκ·Έλ§ˆ ν•¨μˆ«κ°’μ˜ ν•© $ \displaystyle \sum_{k=1}^{N} \sigma(k) $을 κ΅¬ν•˜λŠ” 문제λ₯Ό μƒκ°ν•˜μž. μ •μˆ˜λ‘ μ  μ ‘κ·Ό $\sigma(1) + \cdots + \sigma(N)$의 값은 λ‹€μŒ 쑰건을 λ§Œμ‘±ν•˜λŠ” μ–‘μ˜ μ •μˆ˜ 쌍 $(n, d)$의 κ°œμˆ˜μ™€ κ°™λ‹€. $d$λŠ” $n$의 μ•½μˆ˜ $1 \le d \le n \le N$ μ΄λŠ” μ‹œκ·Έλ§ˆ ν•¨μˆ˜μ˜ μ •μ˜λ₯Ό 생각할 λ•Œ, $\sigma(k)$의 값은 $n = k$인 $(n, d)$의 κ°œμˆ˜μ™€ κ°™μœΌλ―€λ‘œ 자λͺ…ν•˜λ‹€. 이제, $d$의 값을 κ³ μ •ν•œ ν›„, μœ„μ˜ 쑰건을 λ§Œμ‘±ν•˜λŠ” $n$의 개수λ₯Ό μ„Έμž. $n$은 $N$ μ΄ν•˜μΈ $d$의 λ°°μˆ˜λΌμ•Ό ν•˜λ―€λ‘œ, 총 $ \displaystyle \left\lfloor \frac{ N }{ d } \right\rfloor $개만큼 μ‘΄μž¬ν•œλ‹€. \[\sum _{k=1}^{N} \sigma(k) = \sum _{d=1}^{N} \left\lfloor \frac{ N }{ d } \right\rfloor\] μ΄λŠ” λ‹€λ₯΄κ²Œ ν•΄μ„ν•˜λ©΄, $y = \frac{N}{x}$ κ·Έλž˜ν”„ μ•„λž˜μ— μžˆλŠ” μ–‘μ˜ μ •μˆ˜ 쌍 $(x, y)$의 개수λ₯Ό μ„ΈλŠ” 것과 κ°™λ‹€. 곑선 $xy = N$은 직선 $x = y$에 λŒ€ν•˜μ—¬ λŒ€μΉ­μ΄λ©°, 이 λ‘˜μ˜ ꡐ점은 $\left( \sqrt{N}, \sqrt{N} \right)$μ΄λ―€λ‘œ, μ΅œμ’…μ μœΌλ‘œ μ•„λž˜μ˜ 식을 얻을 수 μžˆλ‹€. \[\sum _{d=1}^{N} \left\lfloor \frac{ N }{ d } \right\rfloor = 2 \sum _{x=1}^{ \left\lfloor \sqrt{N} \right\rfloor } \left\lfloor \frac{ N }{ x } \right\rfloor - { \left\lfloor \sqrt{N} \right\rfloor }^2\] μš°λ¦¬λŠ” μ‹œκ·Έλ§ˆ ν•¨μˆ˜ $\sigma(n)$의 값을 μ–΄λ–»κ²Œ κ³„μ‚°ν•˜λŠ”μ§€ μ•Œμ§€ μ•Šμ•„λ„, μ‹œκ·Έλ§ˆ ν•¨μˆ˜μ˜ 합을 $O \left( \sqrt{N} \right)$λ§Œμ— μ‰½κ²Œ 계산할 수 있게 λ˜μ—ˆλ‹€. κ·ΈλŸ¬λ‚˜ $N$이 $10^{18}$-scale둜 μ•„μ£Ό 큰 수라면, μš°λ¦¬λŠ” 이보닀도 λ”μš± 효율적인 방법을 μ°Ύμ•„μ•Ό ν•œλ‹€. Stern-Brocot Tree 효율적인 μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬μƒν•˜κΈ° 전에, 페리 μˆ˜μ—΄κ³Ό Stern-Brocot Tree μžλ£Œκ΅¬μ‘°μ— λŒ€ν•˜μ—¬ λ¨Όμ € μ•Œμ•„λ³΄μž. Farey Sequence Stern-Brocot Tree에 λŒ€ν•˜μ—¬ λ…Όν•˜κΈ° 전에, λ¨Όμ € 페리 μˆ˜μ—΄ 의 μ •μ˜λ₯Ό μ†Œκ°œν•œλ‹€. $n$번째 페리 μˆ˜μ—΄ $F_n$λŠ” λ‹€μŒμ„ λ§Œμ‘±ν•˜λŠ” λͺ¨λ“  κΈ°μ•½λΆ„μˆ˜ $ \displaystyle \frac{a}{b} $λ₯Ό μ˜€λ¦„μ°¨μˆœμœΌλ‘œ λ‚˜μ—΄ν•œ μˆ˜μ—΄μ΄λ‹€. $0 \le b \le a \le n$ $\gcd (a, b) = 1$ 예λ₯Ό λ“€μ–΄, λͺ‡λͺ‡μ˜ $n$에 λŒ€ν•˜μ—¬ 페리 μˆ˜μ—΄ $F_n$을 λ‚˜μ—΄ν•˜λ©΄ μ•„λž˜μ™€ κ°™λ‹€. \[F _1 = \left\{ \frac{0}{1}, \frac{1}{1} \right\}\] \[F _2 = \left\{ \frac{0}{1}, \frac{1}{2}, \frac{1}{1} \right\}\] \[F _5 = \left\{ \frac{0}{1}, \frac{1}{5}, \frac{1}{4}, \frac{1}{3}, \frac{2}{5}, \frac{1}{2}, \frac{3}{5}, \frac{2}{3}, \frac{3}{4}, \frac{4}{5}, \frac{1}{1} \right\}\] μ—¬κΈ°μ„œ, 페리 μˆ˜μ—΄ $F_n$μ—μ„œ μΈμ ‘ν•œ 두 유리수λ₯Ό β€œμ°¨μˆ˜ $n$μ—μ„œ 페리 μ΄μ›ƒν•˜λ‹€β€λΌκ³  ν•œλ‹€. 페리 이웃에 κ΄€ν•œ μ€‘μš”ν•œ 정리λ₯Ό ν•˜λ‚˜ μ†Œκ°œν•œλ‹€. μ°¨μˆ˜μ— 상관없이, 페리 μ΄μ›ƒν•œ 두 유리수 $ \displaystyle \frac{a}{b} > \frac{c}{d} $λŠ” $ad - bc = 1$을 λ§Œμ‘±ν•œλ‹€. 이 μ •λ¦¬λŠ” μ•„λž˜μ— μ„œμˆ ν•  Stern-Brocot Tree에 κ΄€ν•œ μ •λ¦¬μ˜ 기반이 λœλ‹€. Stern-Brocot Tree 페리 μˆ˜μ—΄ $F_n$을 ν™•μž₯ν•˜μ—¬, 각 유리수의 μ—­μˆ˜κΉŒμ§€ λ“±μž₯ν•˜λŠ” μˆ˜μ—΄μ„ μƒκ°ν•˜μž. νŽΈμ˜μƒ, $ \displaystyle \frac{1}{0} = + \infty $둜 μƒκ°ν•˜λ©΄, 이 μˆ˜μ—΄μ€ $ \displaystyle \frac{0}{1} = 0 $ 이상 $ \displaystyle \frac{1}{0} = + \infty $ μ΄ν•˜μΈ κΈ°μ•½λΆ„μˆ˜λ₯Ό 잘 λ‚˜μ—΄ν•  것이닀. μ‹€μ œλ‘œ, $0$ μ΄μƒμ˜ λͺ¨λ“  μœ λ¦¬μˆ˜λŠ” μΆ©λΆ„νžˆ 큰 $n$에 λŒ€ν•˜μ—¬ ν™•μž₯된 페리 μˆ˜μ—΄ $F’ _n$에 μ •ν™•ν•˜κ²Œ ν•œ 번 λ“±μž₯함을 증λͺ…ν•  수 μžˆλ‹€. 이제, 깊이 $n$에 ν•΄λ‹Ήν•˜λŠ” 측에 ν™•μž₯된 페리 μˆ˜μ—΄ $F’ _n$을 적어, μ•„λž˜ κ·Έλ¦Όκ³Ό 같은 이진 트리λ₯Ό μƒκ°ν•˜μž. κ·Έλ¦Ό 1: Stern–Brocot Tree ν™•μž₯된 페리 μˆ˜μ—΄ $F' _1$λΆ€ν„° $F' _4$κΉŒμ§€ ν™œμš©ν•˜μ—¬ 깊이 4의 Stern-Brocot Treeλ₯Ό λ§Œλ“€ 수 μžˆλ‹€. 이 νŠΈλ¦¬λŠ” (1) μ™„μ „ 이진 검색 트리 이며, (2) λͺ¨λ“  μ–‘μ˜ μœ λ¦¬μˆ˜κ°€ μ •ν™•ν•˜κ²Œ ν•œ λ²ˆμ”© λ“±μž₯ ν•œλ‹€λŠ” κ°•λ ₯ν•œ μ„±μ§ˆμ„ κ°€μ§„λ‹€. λ˜ν•œ, 트리 κ·Έ 자체둜 μœ λ¦¬μˆ˜μ™€ μžμ—°μˆ˜ κ°„μ˜ μΌλŒ€μΌ λŒ€μ‘μ„ 잘 보여쀀닀. μ΄λŸ¬ν•œ μ™„μ „ 이진 검색 트리λ₯Ό Stern-Brocot Tree 라고 λΆ€λ₯Έλ‹€. 유리수 이뢄탐색 μ•Œκ³ λ¦¬μ¦˜ λΆ„μ•Όμ—μ„œ Stern-Brocot TreeλŠ” 유리수λ₯Ό λŒ€μƒμœΌλ‘œ 이뢄탐색을 ν•  수 있게 λ˜μ—ˆλ‹€λŠ” μ μ—μ„œ κ·Έ μ˜λ―Έκ°€ κΉŠλ‹€. 두 유리수 $ \displaystyle \frac{a}{b} < \frac{c}{d} $에 λŒ€ν•˜μ—¬, $\displaystyle \frac{a}{b}$ 초과 $\displaystyle \frac{c}{d}$ 미만의 λͺ¨λ“  유리수λ₯Ό λ‹΄κ³  μžˆλŠ” Stern-Brocot Subtree의 루트 정점은 $\displaystyle \frac{a+c}{b+d}$이닀. 이λ₯Ό κ·ΈλŒ€λ‘œ ν™œμš©ν•˜λ©΄, λ‹€μŒκ³Ό 같은 이뢄탐색 μ•Œκ³ λ¦¬μ¦˜μ„ 생각할 수 μžˆλ‹€. $ \displaystyle s := \frac{a}{b} = \frac{0}{1} $, $ \displaystyle e := \frac{c}{d} = \frac{1}{0} $으둜 μ„€μ •ν•œλ‹€. 이제, 각 μŠ€ν…λ§ˆλ‹€ $s$ 초과 $e$ 미만인 μœ λ¦¬μˆ˜μ— λŒ€ν•˜μ—¬ 이뢄탐색을 μˆ˜ν–‰ν•œλ‹€. 쀑간값 $ \displaystyle m := \frac{ a+c }{ b+d } $을 작자. λ§Œμ•½, $m$이 찾고자 ν•˜λŠ” 유리수라면, 탐색을 λ©ˆμΆ˜λ‹€. μ•„λ‹ˆλΌλ©΄, 찾고자 ν•˜λŠ” μœ λ¦¬μˆ˜μ™€ $m$에 λŒ€ν•œ λŒ€μ†ŒλΉ„κ΅λ₯Ό μˆ˜ν–‰ν•œλ‹€. $(s, e)$λ₯Ό $(s, m)$ ν˜Ήμ€ $(m, e)$둜 λŒ€μž…ν•œ ν›„, μœ„μ˜ 과정을 λ°˜λ³΅ν•œλ‹€. μ΄λŸ¬ν•œ 이뢄탐색 과정을 ν†΅ν•˜μ—¬ μ΅œμ’…μ μœΌλ‘œ κΈ°μ•½λΆ„μˆ˜ $ \displaystyle \frac{x}{y} $λ₯Ό μ–»μ—ˆλ‹€λ©΄, 탐색 νšŸμˆ˜λŠ” Stern-Brocot Treeμ—μ„œ 정점 $ \displaystyle \frac{x}{y} $의 κΉŠμ΄μ™€ κ°™μœΌλ―€λ‘œ $O(x+y)$이닀. κ³Όμ • 2.λŠ” Stern-Brocot Tree의 μ •μ μ—μ„œ ν•œ μͺ½ λ°©ν–₯으둜 λ‚΄λ €κ°€λŠ” 것을 λ‚˜νƒ€λ‚Έλ‹€. μ—¬κΈ°μ„œ, μ—°μ†μœΌλ‘œ λͺ‡ λ²ˆκΉŒμ§€ 같은 λ°©ν–₯으둜 λ‚΄λ €κ°€λŠ”μ§€λ₯Ό μ•Œμ•„λ‚Ό 수 μžˆλ‹€λ©΄ 탐색 횟수λ₯Ό 쀄일 수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, 쀑간값 $m$보닀 μž‘μ€ μͺ½μœΌλ‘œ 탐색을 μ΄μ–΄λ‚˜κ°€μ•Ό ν•œλ‹€λ©΄, $e$ 값을 $ \displaystyle \frac{ ta + c }{ tb + d } $ 꼴둜 μ œν•œν•  수 μžˆλ‹€. 이것이 κ°€λŠ₯ν•œ μ΅œλŒ€ μ •μˆ˜ $t$λ₯Ό μ΄λΆ„νƒμƒ‰μœΌλ‘œ 찾으면, 전체 탐색 횟수λ₯Ό $O(x+y)$μ—μ„œ $O \left( x + \lg y \right)$둜 크게 κ°œμ„ ν•  수 μžˆλ‹€. κΈ°ν•˜μ  μ ‘κ·Ό λ‹€μ‹œ μ›λž˜μ˜ 문제둜 λŒμ•„μ˜€μž. μš°λ¦¬λŠ” μ•„λž˜μ˜ κ·Έλ¦Όκ³Ό 같이 $ \displaystyle y = \frac{N}{x} $ 곑선 μ•„λž˜μ˜ νšŒμƒ‰ μ˜μ—­μ— μ‘΄μž¬ν•˜λŠ” μ–‘μ˜ μ •μˆ˜ 쌍 $(x, y)$의 수λ₯Ό μ„Έμ–΄μ•Ό ν•œλ‹€. κ·Έλ¦Ό 2: $xy = 20$ κ·Έλž˜ν”„μ™€ νšŒμƒ‰ μ˜μ—­ $N = 20$이라면 μœ„ νšŒμƒ‰ μ˜μ—­ λ‚΄λΆ€μ˜ μ •μˆ˜ 점의 개수λ₯Ό μ„Έμ–΄μ•Ό ν•œλ‹€. 이 κ·Έλž˜ν”„μ—μ„œ κΈ°μšΈκΈ°κ°€ $-1$인 접선을 κΈ‹μž. μ•„λž˜μ˜ 그림에 접점 $G$, $x$ μΆ•κ³Ό $y$ μΆ•κ³Όμ˜ ꡐ점 $P _x$, $P _y$을 λ‚˜νƒ€λ‚΄μ—ˆλ‹€. κ·Έλ¦Ό 3: $xy = 20$ κ·Έλž˜ν”„μ™€ 기울기 $-1$의 μ ‘μ„  접점 $G$와 μ€‘μš”ν•œ ꡐ점 두 개 $P _x$, $P _y$λ₯Ό λ‚˜νƒ€λ‚΄μ—ˆλ‹€. μ ‘μ„  μ•„λž˜ μ˜μ—­μ˜ μ •μˆ˜ 점의 κ°œμˆ˜λŠ” μ‰½κ²Œ μ…€ 수 μžˆλ‹€. μ—¬κΈ°μ„œ μ•„μ΄λ””μ–΄λŠ” μ΄λŸ¬ν•˜λ‹€. 곑선 μ•„λž˜μ˜ μ •μˆ˜ 점의 개수λ₯Ό μ„ΈλŠ” 것은 μ–΄λ ΅μ§€λ§Œ, 직선 μ•„λž˜μ˜ μ •μˆ˜ 점의 μˆ˜λŠ” 사칙연산을 μ΄μš©ν•˜μ—¬ μ•„μ£Ό μ‰½κ²Œ μ…€ 수 μžˆλ‹€. μš°λ¦¬λŠ” 남은 μ˜μ—­μ— λŒ€ν•˜μ—¬ μ λ‹Ήν•œ 기울기의 접선을 κ·Έμ–΄ 점의 개수λ₯Ό μ„ΈλŠ” μž‘μ—…μ„ μž¬κ·€μ μœΌλ‘œ λ°˜λ³΅ν•˜κ³ μž ν•œλ‹€. μ •μˆ˜ 점의 κ°œμˆ˜λŠ” μœ ν•œν•˜λ―€λ‘œ, μ ‘μ„ μ˜ 기울기λ₯Ό 잘 μ„€μ •ν•˜μ˜€λ‹€λ©΄, μ΄λŸ¬ν•œ μž‘μ—…μ€ μœ ν•œ μ‹œκ°„ μ•ˆμ— μ’…λ£Œν•  것이닀. 편의λ₯Ό μœ„ν•˜μ—¬, κ·Έλ¦Ό 4 와 같은 μ˜μ—­ λ‚΄λΆ€μ˜ μ •μˆ˜ 점의 개수λ₯Ό $\displaystyle f \left( x _0, y _0, \frac{a}{b}, \frac{c}{d} \right)$둜 λ‚˜νƒ€λ‚΄μž. 이에 λŒ€ν•œ μ—„λ°€ν•œ μ •μ˜λŠ” λ‹€μŒκ³Ό κ°™λ‹€. 음이 μ•„λ‹Œ μ •μˆ˜ $x _0$, $y _0$κ³Ό 페리 μ΄μ›ƒν•œ 두 κΈ°μ•½λΆ„μˆ˜ $\displaystyle \frac{a}{b}$, $\displaystyle \frac{c}{d}$에 λŒ€ν•˜μ—¬, 점 $P \left( x _0, y _0 \right)$을 작고 점 $P$λ‘œλΆ€ν„° 각각 기울기 $\displaystyle - \frac{a}{b}$, $\displaystyle - \frac{c}{d}$의 접선을 κ·Έμ–΄ ꡐ점 $Q$, $R$λ₯Ό μž‘μ•˜μ„ λ•Œ 직선과 κ³‘μ„ μœΌλ‘œ λ‹«νžŒ 삼각 μ˜μ—­ $PQR$ λ‚΄λΆ€μ˜ μ •μˆ˜ 점의 개수λ₯Ό $\displaystyle f \left( x _0, y _0, \frac{a}{b}, \frac{c}{d} \right)$둜 μ •μ˜ν•œλ‹€. μΈμžκ°€ μƒκΈ°ν•œ 쑰건을 λ§Œμ‘±ν•˜μ§€ μ•ŠμœΌλ©΄, νŽΈμ˜μƒ $\displaystyle f \left( x _0, y _0, \frac{a}{b}, \frac{c}{d} \right) = 0$으둜 μ •μ˜ν•œλ‹€. κ·Έλ¦Ό 4: 점 $P$, $Q$, $R$κ³Ό νšŒμƒ‰ 삼각 μ˜μ—­ $\displaystyle f \left( x _0, y _0, \frac{a}{b}, \frac{c}{d} \right)$의 μ •μ˜μ—μ„œ μ‚¬μš©λ˜λŠ” μ„Έ 점을 λ‚˜νƒ€λ‚΄μ—ˆλ‹€. μš°λ¦¬λŠ” κ²°κ΅­ $\displaystyle f \left( x _0, y _0, \frac{a}{b}, \frac{c}{d} \right)$κ°€ 0이 될 λ•ŒκΉŒμ§€ μž¬κ·€μ μœΌλ‘œ 탐색을 μ΄μ–΄λ‚˜κ°€μ•Ό ν•œλ‹€. λ”°λΌμ„œ, 이 ν•¨μˆ«κ°’μ„ 계산할 수 μžˆμ–΄μ•Ό ν•œλ‹€. 이λ₯Ό μ–΄λ–»κ²Œ 계산할 수 μžˆμ„κΉŒ? κ·Έλ¦Ό 4 의 두 접선을 각각 μƒˆλ‘œμš΄ μΆ•μœΌλ‘œ 작고, 점 $P$λ₯Ό μ›μ μœΌλ‘œ μƒκ°ν•œ μƒˆλ‘œμš΄ μ’Œν‘œκ³„ $u-v$λ₯Ό μƒκ°ν•˜μž. $u$ 좕이 직선 $PR$, $v$ 좕이 직선 $PQ$이닀. 이 경우 νšŒμƒ‰ μ˜μ—­μ€ λ‹€μŒκ³Ό 같이 λ³€ν™˜λœλ‹€. κ·Έλ¦Ό 5: λ³€ν™˜λœ μƒˆλ‘œμš΄ μ˜μ—­ λ“œλ””μ–΄ μš°λ¦¬λŠ” μž¬κ·€μ μœΌλ‘œ μ •μˆ˜ 점의 개수λ₯Ό μ…€ 수 있게 λ˜μ—ˆλ‹€! μ‹œκ°„ λ³΅μž‘λ„ μž¬κ·€μ μœΌλ‘œ λ³€ν•˜λŠ” μ ‘μ„ μ˜ κΈ°μšΈκΈ°λŠ” Stern-Brocot Treeμ—μ„œ 경둜λ₯Ό 따라 μ•„λž˜λ‘œ λ‚΄λ €κ°€λŠ” 것과 κ°™μœΌλ―€λ‘œ, μ‹œκ°„ λ³΅μž‘λ„λ₯Ό μ•„λž˜μ™€ 같이 μ“Έ 수 μžˆλ‹€. \[O \left( \sum _{ ad - bc = 1 } I \left[ \sqrt{ \frac{N}{ c/d } } - \sqrt{ \frac{N}{ a/b } } \ge b + d \right] \right)\] \[= O \left( \sum _{ ad - bc = 1 } I \left[ \frac{ \sqrt{bc + 1} - \sqrt{bc} }{ \sqrt{ac} } \ge \frac{ b + d }{ \sqrt{N} } \right] \right)\] \[= O \left( \sum _{ ad - bc = 1} I \left[ \frac{1}{ \sqrt{ab} c } \ge \frac{b+d}{\sqrt{N}} \right] \right) = O \left( \sum _{ad - bc = 1} I \left[ ab c^2 \left( b + d \right)^2 \ge N \right] \right)\] λ§ˆμ§€λ§‰ μ€„μ—μ„œλŠ” $ \displaystyle \sqrt{x+1} - \sqrt{x} = O \left( \frac{1}{ \sqrt{x} } \right) $κ°€ μ‚¬μš©λ˜μ—ˆλ‹€. 이제, $t = bc$ μΉ˜ν™˜μ„ μ μš©ν•˜λ©΄, \[O \left( \sum _{t} \sum _{ b | t} \sum _{ a | (t+1) } I \left[ \frac{t^4}{ab} + t^3 + ab t^2 \ge N \right] \right)\] \[= O \left( \sum _{t = 1}^{N^{1/3}} \sigma(t) \sigma(t+1) \right) = O \left( \sum _{t=1}^{N^{1/3}} \sigma^2 (t) \right)\] μ—„λ°€ν•œ 증λͺ…μ΄λ‚˜ 식 μ „κ°œλŠ” μƒλž΅ν•˜μ˜€λ‹€. 이제, λ‹€μŒμ˜ 잘 μ•Œλ €μ§„ 정리λ₯Ό μ μš©ν•˜μž. \[\sum _{k=1}^{N} \sigma^2 (k) = \Theta \left( N \lg^3 N \right)\] 즉, μ„œμˆ ν•œ μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„ λ³΅μž‘λ„λŠ” $ \displaystyle O \left( N^{ \frac{1}{3} } \lg^3 N \right) = \tilde{O}\left( N^{ \frac{1}{3} } \right) $ μž„μ„ μ•Œ 수 μžˆλ‹€. κ²°λ‘  수둠적 ν•¨μˆ˜λŠ” μ •μˆ˜λ‘  뿐만 μ•„λ‹ˆλΌ 컴퓨터과학, μ•Œκ³ λ¦¬μ¦˜, PS 뢄야에도 μ‚¬μš©λ  μ •λ„λ‘œ μ€‘μš”ν•˜λ©° κ·Έ 폭이 μ•„μ£Ό λ„“λ‹€. μš°λ¦¬λŠ” λŒ€ν‘œμ μΈ 수둠적 ν•¨μˆ˜ $\sigma (n)$의 ꡬ간 ν•© $ \displaystyle \sum _{k=1}^{N} \sigma(k) $을 효율적으둜 κ³„μ‚°ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ— λŒ€ν•˜μ—¬ μ•Œμ•„λ³΄μ•˜λ‹€. 일반적인 식 μ „κ°œλ‘œλŠ” $ \displaystyle O \left( \sqrt{N} \right) $κΉŒμ§€ μ‹œκ°„ λ³΅μž‘λ„λ₯Ό 쀄일 수 μžˆμ—ˆλ‹€. κ·ΈλŸ¬λ‚˜, $N$이 μ•„μ£Ό 큰 수라면 이 방법도 아직은 λŠλ¦¬λ‹€. μš°λ¦¬λŠ” $ \displaystyle y = \frac{N}{x} $ κ·Έλž˜ν”„μ™€ κ΅¬ν•˜κ³ μž ν•˜λŠ” κ°’κ³Όμ˜ 관계λ₯Ό μ•Œμ•„λ‚΄κ³ , κ·Έλž˜ν”„μ˜ λ³Όλ‘μ„±μ΄λΌλŠ” κΈ°ν•˜μ  νŠΉμ„±κ³Ό Stern-Brocot Tree 자료ꡬ쑰λ₯Ό ν™œμš©ν•˜μ—¬, μž¬κ·€μ μœΌλ‘œ 값을 κ³„μ‚°ν•˜λŠ” μƒˆλ‘œμš΄ μ•Œκ³ λ¦¬μ¦˜μ„ μ‘°μ‚¬ν•˜μ˜€λ‹€. λ˜ν•œ, 이 μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„ λ³΅μž‘λ„κ°€ $ \displaystyle \tilde{O} \left( N^{1/3} \right) $둜 μ•„μ£Ό νš¨μœ¨μ μž„μ„ λ°ν˜”λ‹€. μ΄λŸ¬ν•œ μ•Œκ³ λ¦¬μ¦˜μ˜ μ•„μ΄λ””μ–΄λŠ” λ‹€μ–‘ν•œ 볼둝 ν•¨μˆ˜μ— λŒ€ν•˜μ—¬ μ ‘λͺ©μ‹œν‚¬ 수 있으며, κ·Έ μ‘μš©μ„±μ΄ λ†’λ‹€. λ‹€μŒ κΈ€μ—λŠ” $\sigma (n)$ 외에 λ‹€λ₯Έ 수둠적 ν•¨μˆ˜μ˜ ꡬ간 합을 효율적으둜 κ³„μ‚°ν•˜λŠ” 방법에 λŒ€ν•˜μ—¬ μ•Œμ•„λ³Έλ‹€.
Markdown
[Gyojun Youn's PS Blog](https://youngyojun.github.io/) @youngyojun, @GyojunYoun, and @yclock's PS Blog - [ν™ˆ](https://youngyojun.github.io/) - [About](https://youngyojun.github.io/about/) - [μΉ΄ν…Œκ³ λ¦¬](https://youngyojun.github.io/categories/) - [μ•„μΉ΄μ΄λΈŒ](https://youngyojun.github.io/archives/) - [νƒœκ·Έ](https://youngyojun.github.io/tags/) - [검색]() # Stern-Brocot Treeλ₯Ό ν™œμš©ν•œ 수둠적 ν•¨μˆ˜μ˜ ν•© 계산 μž‘μ„±μΌ 2022-02-18 \| In [Secmem](https://youngyojun.github.io/category/#/Secmem) \| [0 Comments](https://youngyojun.github.io/secmem/2022/02/18/sigma-sum-stern-brocot/#comments) # κ°œμš” μ •μˆ˜λ‘ μ—μ„œ 주둜 λ‹€λ£¨λŠ” μ€‘μš”ν•œ [수둠적 ν•¨μˆ˜](https://en.wikipedia.org/wiki/Arithmetic_function)λ‘œλŠ” μ•½μˆ˜ ν•¨μˆ˜ \$\\sigma\_k (n)\$, 였일러 ν”Ό ν•¨μˆ˜ \$\\phi (n)\$, λ«ΌλΉ„μš°μŠ€ ν•¨μˆ˜ \$\\mu (n)\$ 등이 μžˆλ‹€. μ΄λŸ¬ν•œ ν•¨μˆ˜μ˜ 학문적 μ€‘μš”λ„λŠ” 이루 말할 수 μ—†μœΌλ©°, 컴퓨터과학와 PS 뢄야에도 μ’…μ’… λ“±μž₯ν•  μ •λ„λ‘œ λ‹€μ–‘ν•˜κ²Œ ν™œμš©λœλ‹€. λ³Έ 글은 수둠적 ν•¨μˆ˜μ˜ λŒ€ν‘œμΈ μ•½μˆ˜ ν•¨μˆ˜ \$\\sigma (n)\$의 ꡬ간 합을 효율적으둜 κ³„μ‚°ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ„ μ„œμˆ ν•œλ‹€. ν•¨μˆ˜μ˜ 합을 κΈ°ν•˜μ μœΌλ‘œ ν•΄μ„ν•œ ν›„, 이λ₯Ό Stern-Brocot Tree 자료ꡬ쑰둜 κ³„μ‚°ν•œλ‹€. 이후, 이 μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„ λ³΅μž‘λ„κ°€ \$\\tilde{O} \\left( N^{1/3} \\right)\$둜 μ•„μ£Ό νš¨μœ¨μ μž„μ„ 보인닀. # 문제 제기 ## μ•½μˆ˜ ν•¨μˆ˜μ˜ ν•© 문제 μ–‘μ˜ μ •μˆ˜ \$n\$에 λŒ€ν•˜μ—¬, \$n\$의 λͺ¨λ“  μ–‘μ˜ μ•½μˆ˜μ˜ \$k\$제곱의 합을 μƒκ°ν•˜μž. 이것이 [μ•½μˆ˜ ν•¨μˆ˜](https://en.wikipedia.org/wiki/Divisor_function) \$\\sigma\_k (n)\$의 μ •μ˜μ΄λ‹€. > \\\[\\sigma\_k (n) := \\sum\_{ d \| n } d^k\\\] 이 κΈ€μ—μ„œλŠ” \$k = 1\$인 μ‹œκ·Έλ§ˆ ν•¨μˆ˜ \$\\sigma (n) := \\sigma\_1 (n)\$에 λŒ€ν•˜μ—¬ 주둜 닀룬닀. 이 값은 \$n\$의 μ•½μˆ˜μ˜ 합을 λ‚˜νƒ€λ‚Έλ‹€. 이제, μ •μˆ˜ \$N\$이 μ£Όμ–΄μ‘Œμ„ λ•Œ, 1λΆ€ν„° \$N\$κΉŒμ§€ μ‹œκ·Έλ§ˆ ν•¨μˆ«κ°’μ˜ ν•© \$ \\displaystyle \\sum\_{k=1}^{N} \\sigma(k) \$을 κ΅¬ν•˜λŠ” 문제λ₯Ό μƒκ°ν•˜μž. ## μ •μˆ˜λ‘ μ  μ ‘κ·Ό \$\\sigma(1) + \\cdots + \\sigma(N)\$의 값은 λ‹€μŒ 쑰건을 λ§Œμ‘±ν•˜λŠ” μ–‘μ˜ μ •μˆ˜ 쌍 \$(n, d)\$의 κ°œμˆ˜μ™€ κ°™λ‹€. > 1. \$d\$λŠ” \$n\$의 μ•½μˆ˜ > 2. \$1 \\le d \\le n \\le N\$ μ΄λŠ” μ‹œκ·Έλ§ˆ ν•¨μˆ˜μ˜ μ •μ˜λ₯Ό 생각할 λ•Œ, \$\\sigma(k)\$의 값은 \$n = k\$인 \$(n, d)\$의 κ°œμˆ˜μ™€ κ°™μœΌλ―€λ‘œ 자λͺ…ν•˜λ‹€. 이제, \$d\$의 값을 κ³ μ •ν•œ ν›„, μœ„μ˜ 쑰건을 λ§Œμ‘±ν•˜λŠ” \$n\$의 개수λ₯Ό μ„Έμž. \$n\$은 \$N\$ μ΄ν•˜μΈ \$d\$의 λ°°μˆ˜λΌμ•Ό ν•˜λ―€λ‘œ, 총 \$ \\displaystyle \\left\\lfloor \\frac{ N }{ d } \\right\\rfloor \$개만큼 μ‘΄μž¬ν•œλ‹€. \\\[\\sum \_{k=1}^{N} \\sigma(k) = \\sum \_{d=1}^{N} \\left\\lfloor \\frac{ N }{ d } \\right\\rfloor\\\] μ΄λŠ” λ‹€λ₯΄κ²Œ ν•΄μ„ν•˜λ©΄, \$y = \\frac{N}{x}\$ κ·Έλž˜ν”„ μ•„λž˜μ— μžˆλŠ” μ–‘μ˜ μ •μˆ˜ 쌍 \$(x, y)\$의 개수λ₯Ό μ„ΈλŠ” 것과 κ°™λ‹€. 곑선 \$xy = N\$은 직선 \$x = y\$에 λŒ€ν•˜μ—¬ λŒ€μΉ­μ΄λ©°, 이 λ‘˜μ˜ ꡐ점은 \$\\left( \\sqrt{N}, \\sqrt{N} \\right)\$μ΄λ―€λ‘œ, μ΅œμ’…μ μœΌλ‘œ μ•„λž˜μ˜ 식을 얻을 수 μžˆλ‹€. \\\[\\sum \_{d=1}^{N} \\left\\lfloor \\frac{ N }{ d } \\right\\rfloor = 2 \\sum \_{x=1}^{ \\left\\lfloor \\sqrt{N} \\right\\rfloor } \\left\\lfloor \\frac{ N }{ x } \\right\\rfloor - { \\left\\lfloor \\sqrt{N} \\right\\rfloor }^2\\\] μš°λ¦¬λŠ” μ‹œκ·Έλ§ˆ ν•¨μˆ˜ \$\\sigma(n)\$의 값을 μ–΄λ–»κ²Œ κ³„μ‚°ν•˜λŠ”μ§€ μ•Œμ§€ μ•Šμ•„λ„, μ‹œκ·Έλ§ˆ ν•¨μˆ˜μ˜ 합을 \$O \\left( \\sqrt{N} \\right)\$λ§Œμ— μ‰½κ²Œ 계산할 수 있게 λ˜μ—ˆλ‹€. κ·ΈλŸ¬λ‚˜ \$N\$이 \$10^{18}\$-scale둜 μ•„μ£Ό 큰 수라면, μš°λ¦¬λŠ” 이보닀도 λ”μš± 효율적인 방법을 μ°Ύμ•„μ•Ό ν•œλ‹€. # Stern-Brocot Tree 효율적인 μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬μƒν•˜κΈ° 전에, 페리 μˆ˜μ—΄κ³Ό Stern-Brocot Tree μžλ£Œκ΅¬μ‘°μ— λŒ€ν•˜μ—¬ λ¨Όμ € μ•Œμ•„λ³΄μž. ## Farey Sequence Stern-Brocot Tree에 λŒ€ν•˜μ—¬ λ…Όν•˜κΈ° 전에, λ¨Όμ € [페리 μˆ˜μ—΄](https://en.wikipedia.org/wiki/Farey_sequence)의 μ •μ˜λ₯Ό μ†Œκ°œν•œλ‹€. \$n\$번째 페리 μˆ˜μ—΄ \$F\_n\$λŠ” λ‹€μŒμ„ λ§Œμ‘±ν•˜λŠ” λͺ¨λ“  κΈ°μ•½λΆ„μˆ˜ \$ \\displaystyle \\frac{a}{b} \$λ₯Ό μ˜€λ¦„μ°¨μˆœμœΌλ‘œ λ‚˜μ—΄ν•œ μˆ˜μ—΄μ΄λ‹€. > 1. \$0 \\le b \\le a \\le n\$ > 2. \$\\gcd (a, b) = 1\$ 예λ₯Ό λ“€μ–΄, λͺ‡λͺ‡μ˜ \$n\$에 λŒ€ν•˜μ—¬ 페리 μˆ˜μ—΄ \$F\_n\$을 λ‚˜μ—΄ν•˜λ©΄ μ•„λž˜μ™€ κ°™λ‹€. > \\\[F \_1 = \\left\\{ \\frac{0}{1}, \\frac{1}{1} \\right\\}\\\] \\\[F \_2 = \\left\\{ \\frac{0}{1}, \\frac{1}{2}, \\frac{1}{1} \\right\\}\\\] \\\[F \_5 = \\left\\{ \\frac{0}{1}, \\frac{1}{5}, \\frac{1}{4}, \\frac{1}{3}, \\frac{2}{5}, \\frac{1}{2}, \\frac{3}{5}, \\frac{2}{3}, \\frac{3}{4}, \\frac{4}{5}, \\frac{1}{1} \\right\\}\\\] μ—¬κΈ°μ„œ, 페리 μˆ˜μ—΄ \$F\_n\$μ—μ„œ μΈμ ‘ν•œ 두 유리수λ₯Ό β€œμ°¨μˆ˜ \$n\$μ—μ„œ 페리 μ΄μ›ƒν•˜λ‹€β€λΌκ³  ν•œλ‹€. 페리 이웃에 κ΄€ν•œ μ€‘μš”ν•œ 정리λ₯Ό ν•˜λ‚˜ μ†Œκ°œν•œλ‹€. > μ°¨μˆ˜μ— 상관없이, 페리 μ΄μ›ƒν•œ 두 유리수 \$ \\displaystyle \\frac{a}{b} \> \\frac{c}{d} \$λŠ” \$ad - bc = 1\$을 λ§Œμ‘±ν•œλ‹€. 이 μ •λ¦¬λŠ” μ•„λž˜μ— μ„œμˆ ν•  Stern-Brocot Tree에 κ΄€ν•œ μ •λ¦¬μ˜ 기반이 λœλ‹€. ## Stern-Brocot Tree 페리 μˆ˜μ—΄ \$F\_n\$을 ν™•μž₯ν•˜μ—¬, 각 유리수의 μ—­μˆ˜κΉŒμ§€ λ“±μž₯ν•˜λŠ” μˆ˜μ—΄μ„ μƒκ°ν•˜μž. νŽΈμ˜μƒ, \$ \\displaystyle \\frac{1}{0} = + \\infty \$둜 μƒκ°ν•˜λ©΄, 이 μˆ˜μ—΄μ€ \$ \\displaystyle \\frac{0}{1} = 0 \$ 이상 \$ \\displaystyle \\frac{1}{0} = + \\infty \$ μ΄ν•˜μΈ κΈ°μ•½λΆ„μˆ˜λ₯Ό 잘 λ‚˜μ—΄ν•  것이닀. μ‹€μ œλ‘œ, \$0\$ μ΄μƒμ˜ λͺ¨λ“  μœ λ¦¬μˆ˜λŠ” μΆ©λΆ„νžˆ 큰 \$n\$에 λŒ€ν•˜μ—¬ ν™•μž₯된 페리 μˆ˜μ—΄ \$F’ \_n\$에 μ •ν™•ν•˜κ²Œ ν•œ 번 λ“±μž₯함을 증λͺ…ν•  수 μžˆλ‹€. 이제, 깊이 \$n\$에 ν•΄λ‹Ήν•˜λŠ” 측에 ν™•μž₯된 페리 μˆ˜μ—΄ \$F’ \_n\$을 적어, μ•„λž˜ κ·Έλ¦Όκ³Ό 같은 이진 트리λ₯Ό μƒκ°ν•˜μž. [![](https://youngyojun.github.io/assets/images/posts/2022-02-18-sigma-sum-stern-brocot/SternBrocotTree.png)](https://youngyojun.github.io/assets/images/posts/2022-02-18-sigma-sum-stern-brocot/SternBrocotTree.png) **κ·Έλ¦Ό 1: Stern–Brocot Tree** ν™•μž₯된 페리 μˆ˜μ—΄ \$F' \_1\$λΆ€ν„° \$F' \_4\$κΉŒμ§€ ν™œμš©ν•˜μ—¬ 깊이 4의 Stern-Brocot Treeλ₯Ό λ§Œλ“€ 수 μžˆλ‹€. 이 νŠΈλ¦¬λŠ” (1) **μ™„μ „ 이진 검색 트리**이며, (2) **λͺ¨λ“  μ–‘μ˜ μœ λ¦¬μˆ˜κ°€ μ •ν™•ν•˜κ²Œ ν•œ λ²ˆμ”© λ“±μž₯**ν•œλ‹€λŠ” κ°•λ ₯ν•œ μ„±μ§ˆμ„ κ°€μ§„λ‹€. λ˜ν•œ, 트리 κ·Έ 자체둜 μœ λ¦¬μˆ˜μ™€ μžμ—°μˆ˜ κ°„μ˜ μΌλŒ€μΌ λŒ€μ‘μ„ 잘 보여쀀닀. μ΄λŸ¬ν•œ μ™„μ „ 이진 검색 트리λ₯Ό [Stern-Brocot Tree](https://en.wikipedia.org/wiki/Stern%E2%80%93Brocot_tree)라고 λΆ€λ₯Έλ‹€. ## 유리수 이뢄탐색 μ•Œκ³ λ¦¬μ¦˜ λΆ„μ•Όμ—μ„œ Stern-Brocot TreeλŠ” 유리수λ₯Ό λŒ€μƒμœΌλ‘œ 이뢄탐색을 ν•  수 있게 λ˜μ—ˆλ‹€λŠ” μ μ—μ„œ κ·Έ μ˜λ―Έκ°€ κΉŠλ‹€. 두 유리수 \$ \\displaystyle \\frac{a}{b} \< \\frac{c}{d} \$에 λŒ€ν•˜μ—¬, \$\\displaystyle \\frac{a}{b}\$ 초과 \$\\displaystyle \\frac{c}{d}\$ 미만의 λͺ¨λ“  유리수λ₯Ό λ‹΄κ³  μžˆλŠ” Stern-Brocot Subtree의 루트 정점은 \$\\displaystyle \\frac{a+c}{b+d}\$이닀. 이λ₯Ό κ·ΈλŒ€λ‘œ ν™œμš©ν•˜λ©΄, λ‹€μŒκ³Ό 같은 이뢄탐색 μ•Œκ³ λ¦¬μ¦˜μ„ 생각할 수 μžˆλ‹€. > 1. \$ \\displaystyle s := \\frac{a}{b} = \\frac{0}{1} \$, \$ \\displaystyle e := \\frac{c}{d} = \\frac{1}{0} \$으둜 μ„€μ •ν•œλ‹€. 이제, 각 μŠ€ν…λ§ˆλ‹€ \$s\$ 초과 \$e\$ 미만인 μœ λ¦¬μˆ˜μ— λŒ€ν•˜μ—¬ 이뢄탐색을 μˆ˜ν–‰ν•œλ‹€. > 2. 쀑간값 \$ \\displaystyle m := \\frac{ a+c }{ b+d } \$을 작자. > 1. λ§Œμ•½, \$m\$이 찾고자 ν•˜λŠ” 유리수라면, 탐색을 λ©ˆμΆ˜λ‹€. > 2. μ•„λ‹ˆλΌλ©΄, 찾고자 ν•˜λŠ” μœ λ¦¬μˆ˜μ™€ \$m\$에 λŒ€ν•œ λŒ€μ†ŒλΉ„κ΅λ₯Ό μˆ˜ν–‰ν•œλ‹€. > 3. \$(s, e)\$λ₯Ό \$(s, m)\$ ν˜Ήμ€ \$(m, e)\$둜 λŒ€μž…ν•œ ν›„, μœ„μ˜ 과정을 λ°˜λ³΅ν•œλ‹€. μ΄λŸ¬ν•œ 이뢄탐색 과정을 ν†΅ν•˜μ—¬ μ΅œμ’…μ μœΌλ‘œ κΈ°μ•½λΆ„μˆ˜ \$ \\displaystyle \\frac{x}{y} \$λ₯Ό μ–»μ—ˆλ‹€λ©΄, 탐색 νšŸμˆ˜λŠ” Stern-Brocot Treeμ—μ„œ 정점 \$ \\displaystyle \\frac{x}{y} \$의 κΉŠμ΄μ™€ κ°™μœΌλ―€λ‘œ \$O(x+y)\$이닀. κ³Όμ • 2.λŠ” Stern-Brocot Tree의 μ •μ μ—μ„œ ν•œ μͺ½ λ°©ν–₯으둜 λ‚΄λ €κ°€λŠ” 것을 λ‚˜νƒ€λ‚Έλ‹€. μ—¬κΈ°μ„œ, μ—°μ†μœΌλ‘œ λͺ‡ λ²ˆκΉŒμ§€ 같은 λ°©ν–₯으둜 λ‚΄λ €κ°€λŠ”μ§€λ₯Ό μ•Œμ•„λ‚Ό 수 μžˆλ‹€λ©΄ 탐색 횟수λ₯Ό 쀄일 수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, 쀑간값 \$m\$보닀 μž‘μ€ μͺ½μœΌλ‘œ 탐색을 μ΄μ–΄λ‚˜κ°€μ•Ό ν•œλ‹€λ©΄, \$e\$ 값을 \$ \\displaystyle \\frac{ ta + c }{ tb + d } \$ 꼴둜 μ œν•œν•  수 μžˆλ‹€. 이것이 κ°€λŠ₯ν•œ μ΅œλŒ€ μ •μˆ˜ \$t\$λ₯Ό μ΄λΆ„νƒμƒ‰μœΌλ‘œ 찾으면, 전체 탐색 횟수λ₯Ό \$O(x+y)\$μ—μ„œ \$O \\left( x + \\lg y \\right)\$둜 크게 κ°œμ„ ν•  수 μžˆλ‹€. # κΈ°ν•˜μ  μ ‘κ·Ό λ‹€μ‹œ μ›λž˜μ˜ 문제둜 λŒμ•„μ˜€μž. μš°λ¦¬λŠ” μ•„λž˜μ˜ κ·Έλ¦Όκ³Ό 같이 \$ \\displaystyle y = \\frac{N}{x} \$ 곑선 μ•„λž˜μ˜ νšŒμƒ‰ μ˜μ—­μ— μ‘΄μž¬ν•˜λŠ” μ–‘μ˜ μ •μˆ˜ 쌍 \$(x, y)\$의 수λ₯Ό μ„Έμ–΄μ•Ό ν•œλ‹€. [![](https://youngyojun.github.io/assets/images/posts/2022-02-18-sigma-sum-stern-brocot/1.png)](https://youngyojun.github.io/assets/images/posts/2022-02-18-sigma-sum-stern-brocot/1.png) **κ·Έλ¦Ό 2: \$xy = 20\$ κ·Έλž˜ν”„μ™€ νšŒμƒ‰ μ˜μ—­** \$N = 20\$이라면 μœ„ νšŒμƒ‰ μ˜μ—­ λ‚΄λΆ€μ˜ μ •μˆ˜ 점의 개수λ₯Ό μ„Έμ–΄μ•Ό ν•œλ‹€. 이 κ·Έλž˜ν”„μ—μ„œ κΈ°μšΈκΈ°κ°€ \$-1\$인 접선을 κΈ‹μž. μ•„λž˜μ˜ 그림에 접점 \$G\$, \$x\$ μΆ•κ³Ό \$y\$ μΆ•κ³Όμ˜ ꡐ점 \$P \_x\$, \$P \_y\$을 λ‚˜νƒ€λ‚΄μ—ˆλ‹€. [![](https://youngyojun.github.io/assets/images/posts/2022-02-18-sigma-sum-stern-brocot/2.png)](https://youngyojun.github.io/assets/images/posts/2022-02-18-sigma-sum-stern-brocot/2.png) **κ·Έλ¦Ό 3: \$xy = 20\$ κ·Έλž˜ν”„μ™€ 기울기 \$-1\$의 μ ‘μ„ ** 접점 \$G\$와 μ€‘μš”ν•œ ꡐ점 두 개 \$P \_x\$, \$P \_y\$λ₯Ό λ‚˜νƒ€λ‚΄μ—ˆλ‹€. μ ‘μ„  μ•„λž˜ μ˜μ—­μ˜ μ •μˆ˜ 점의 κ°œμˆ˜λŠ” μ‰½κ²Œ μ…€ 수 μžˆλ‹€. μ—¬κΈ°μ„œ μ•„μ΄λ””μ–΄λŠ” μ΄λŸ¬ν•˜λ‹€. 곑선 μ•„λž˜μ˜ μ •μˆ˜ 점의 개수λ₯Ό μ„ΈλŠ” 것은 μ–΄λ ΅μ§€λ§Œ, 직선 μ•„λž˜μ˜ μ •μˆ˜ 점의 μˆ˜λŠ” 사칙연산을 μ΄μš©ν•˜μ—¬ μ•„μ£Ό μ‰½κ²Œ μ…€ 수 μžˆλ‹€. μš°λ¦¬λŠ” 남은 μ˜μ—­μ— λŒ€ν•˜μ—¬ μ λ‹Ήν•œ 기울기의 접선을 κ·Έμ–΄ 점의 개수λ₯Ό μ„ΈλŠ” μž‘μ—…μ„ μž¬κ·€μ μœΌλ‘œ λ°˜λ³΅ν•˜κ³ μž ν•œλ‹€. μ •μˆ˜ 점의 κ°œμˆ˜λŠ” μœ ν•œν•˜λ―€λ‘œ, μ ‘μ„ μ˜ 기울기λ₯Ό 잘 μ„€μ •ν•˜μ˜€λ‹€λ©΄, μ΄λŸ¬ν•œ μž‘μ—…μ€ μœ ν•œ μ‹œκ°„ μ•ˆμ— μ’…λ£Œν•  것이닀. 편의λ₯Ό μœ„ν•˜μ—¬, **κ·Έλ¦Ό 4**와 같은 μ˜μ—­ λ‚΄λΆ€μ˜ μ •μˆ˜ 점의 개수λ₯Ό \$\\displaystyle f \\left( x \_0, y \_0, \\frac{a}{b}, \\frac{c}{d} \\right)\$둜 λ‚˜νƒ€λ‚΄μž. 이에 λŒ€ν•œ μ—„λ°€ν•œ μ •μ˜λŠ” λ‹€μŒκ³Ό κ°™λ‹€. > 음이 μ•„λ‹Œ μ •μˆ˜ \$x \_0\$, \$y \_0\$κ³Ό 페리 μ΄μ›ƒν•œ 두 κΈ°μ•½λΆ„μˆ˜ \$\\displaystyle \\frac{a}{b}\$, \$\\displaystyle \\frac{c}{d}\$에 λŒ€ν•˜μ—¬, > > 1. 점 \$P \\left( x \_0, y \_0 \\right)\$을 작고 > 2. 점 \$P\$λ‘œλΆ€ν„° 각각 기울기 \$\\displaystyle - \\frac{a}{b}\$, \$\\displaystyle - \\frac{c}{d}\$의 접선을 κ·Έμ–΄ ꡐ점 \$Q\$, \$R\$λ₯Ό μž‘μ•˜μ„ λ•Œ > 3. 직선과 κ³‘μ„ μœΌλ‘œ λ‹«νžŒ 삼각 μ˜μ—­ \$PQR\$ λ‚΄λΆ€μ˜ μ •μˆ˜ 점의 개수λ₯Ό \$\\displaystyle f \\left( x \_0, y \_0, \\frac{a}{b}, \\frac{c}{d} \\right)\$둜 μ •μ˜ν•œλ‹€. > 4. μΈμžκ°€ μƒκΈ°ν•œ 쑰건을 λ§Œμ‘±ν•˜μ§€ μ•ŠμœΌλ©΄, νŽΈμ˜μƒ \$\\displaystyle f \\left( x \_0, y \_0, \\frac{a}{b}, \\frac{c}{d} \\right) = 0\$으둜 μ •μ˜ν•œλ‹€. [![](https://youngyojun.github.io/assets/images/posts/2022-02-18-sigma-sum-stern-brocot/3.png)](https://youngyojun.github.io/assets/images/posts/2022-02-18-sigma-sum-stern-brocot/3.png) **κ·Έλ¦Ό 4: 점 \$P\$, \$Q\$, \$R\$κ³Ό νšŒμƒ‰ 삼각 μ˜μ—­** \$\\displaystyle f \\left( x \_0, y \_0, \\frac{a}{b}, \\frac{c}{d} \\right)\$의 μ •μ˜μ—μ„œ μ‚¬μš©λ˜λŠ” μ„Έ 점을 λ‚˜νƒ€λ‚΄μ—ˆλ‹€. μš°λ¦¬λŠ” κ²°κ΅­ \$\\displaystyle f \\left( x \_0, y \_0, \\frac{a}{b}, \\frac{c}{d} \\right)\$κ°€ 0이 될 λ•ŒκΉŒμ§€ μž¬κ·€μ μœΌλ‘œ 탐색을 μ΄μ–΄λ‚˜κ°€μ•Ό ν•œλ‹€. λ”°λΌμ„œ, 이 ν•¨μˆ«κ°’μ„ 계산할 수 μžˆμ–΄μ•Ό ν•œλ‹€. 이λ₯Ό μ–΄λ–»κ²Œ 계산할 수 μžˆμ„κΉŒ? **κ·Έλ¦Ό 4**의 두 접선을 각각 μƒˆλ‘œμš΄ μΆ•μœΌλ‘œ 작고, 점 \$P\$λ₯Ό μ›μ μœΌλ‘œ μƒκ°ν•œ μƒˆλ‘œμš΄ μ’Œν‘œκ³„ \$u-v\$λ₯Ό μƒκ°ν•˜μž. \$u\$ 좕이 직선 \$PR\$, \$v\$ 좕이 직선 \$PQ\$이닀. 이 경우 νšŒμƒ‰ μ˜μ—­μ€ λ‹€μŒκ³Ό 같이 λ³€ν™˜λœλ‹€. [![](https://youngyojun.github.io/assets/images/posts/2022-02-18-sigma-sum-stern-brocot/4.png)](https://youngyojun.github.io/assets/images/posts/2022-02-18-sigma-sum-stern-brocot/4.png) **κ·Έλ¦Ό 5: λ³€ν™˜λœ μƒˆλ‘œμš΄ μ˜μ—­** λ“œλ””μ–΄ μš°λ¦¬λŠ” μž¬κ·€μ μœΌλ‘œ μ •μˆ˜ 점의 개수λ₯Ό μ…€ 수 있게 λ˜μ—ˆλ‹€\! # μ‹œκ°„ λ³΅μž‘λ„ μž¬κ·€μ μœΌλ‘œ λ³€ν•˜λŠ” μ ‘μ„ μ˜ κΈ°μšΈκΈ°λŠ” Stern-Brocot Treeμ—μ„œ 경둜λ₯Ό 따라 μ•„λž˜λ‘œ λ‚΄λ €κ°€λŠ” 것과 κ°™μœΌλ―€λ‘œ, μ‹œκ°„ λ³΅μž‘λ„λ₯Ό μ•„λž˜μ™€ 같이 μ“Έ 수 μžˆλ‹€. \\\[O \\left( \\sum \_{ ad - bc = 1 } I \\left\[ \\sqrt{ \\frac{N}{ c/d } } - \\sqrt{ \\frac{N}{ a/b } } \\ge b + d \\right\] \\right)\\\] \\\[= O \\left( \\sum \_{ ad - bc = 1 } I \\left\[ \\frac{ \\sqrt{bc + 1} - \\sqrt{bc} }{ \\sqrt{ac} } \\ge \\frac{ b + d }{ \\sqrt{N} } \\right\] \\right)\\\] \\\[= O \\left( \\sum \_{ ad - bc = 1} I \\left\[ \\frac{1}{ \\sqrt{ab} c } \\ge \\frac{b+d}{\\sqrt{N}} \\right\] \\right) = O \\left( \\sum \_{ad - bc = 1} I \\left\[ ab c^2 \\left( b + d \\right)^2 \\ge N \\right\] \\right)\\\] λ§ˆμ§€λ§‰ μ€„μ—μ„œλŠ” \$ \\displaystyle \\sqrt{x+1} - \\sqrt{x} = O \\left( \\frac{1}{ \\sqrt{x} } \\right) \$κ°€ μ‚¬μš©λ˜μ—ˆλ‹€. 이제, \$t = bc\$ μΉ˜ν™˜μ„ μ μš©ν•˜λ©΄, \\\[O \\left( \\sum \_{t} \\sum \_{ b \| t} \\sum \_{ a \| (t+1) } I \\left\[ \\frac{t^4}{ab} + t^3 + ab t^2 \\ge N \\right\] \\right)\\\] \\\[= O \\left( \\sum \_{t = 1}^{N^{1/3}} \\sigma(t) \\sigma(t+1) \\right) = O \\left( \\sum \_{t=1}^{N^{1/3}} \\sigma^2 (t) \\right)\\\] μ—„λ°€ν•œ 증λͺ…μ΄λ‚˜ 식 μ „κ°œλŠ” μƒλž΅ν•˜μ˜€λ‹€. 이제, λ‹€μŒμ˜ 잘 μ•Œλ €μ§„ 정리λ₯Ό μ μš©ν•˜μž. > \\\[\\sum \_{k=1}^{N} \\sigma^2 (k) = \\Theta \\left( N \\lg^3 N \\right)\\\] 즉, μ„œμˆ ν•œ μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„ λ³΅μž‘λ„λŠ” \$ \\displaystyle O \\left( N^{ \\frac{1}{3} } \\lg^3 N \\right) = \\tilde{O}\\left( N^{ \\frac{1}{3} } \\right) \$ μž„μ„ μ•Œ 수 μžˆλ‹€. # κ²°λ‘  수둠적 ν•¨μˆ˜λŠ” μ •μˆ˜λ‘  뿐만 μ•„λ‹ˆλΌ 컴퓨터과학, μ•Œκ³ λ¦¬μ¦˜, PS 뢄야에도 μ‚¬μš©λ  μ •λ„λ‘œ μ€‘μš”ν•˜λ©° κ·Έ 폭이 μ•„μ£Ό λ„“λ‹€. μš°λ¦¬λŠ” λŒ€ν‘œμ μΈ 수둠적 ν•¨μˆ˜ \$\\sigma (n)\$의 ꡬ간 ν•© \$ \\displaystyle \\sum \_{k=1}^{N} \\sigma(k) \$을 효율적으둜 κ³„μ‚°ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ— λŒ€ν•˜μ—¬ μ•Œμ•„λ³΄μ•˜λ‹€. 일반적인 식 μ „κ°œλ‘œλŠ” \$ \\displaystyle O \\left( \\sqrt{N} \\right) \$κΉŒμ§€ μ‹œκ°„ λ³΅μž‘λ„λ₯Ό 쀄일 수 μžˆμ—ˆλ‹€. κ·ΈλŸ¬λ‚˜, \$N\$이 μ•„μ£Ό 큰 수라면 이 방법도 아직은 λŠλ¦¬λ‹€. μš°λ¦¬λŠ” \$ \\displaystyle y = \\frac{N}{x} \$ κ·Έλž˜ν”„μ™€ κ΅¬ν•˜κ³ μž ν•˜λŠ” κ°’κ³Όμ˜ 관계λ₯Ό μ•Œμ•„λ‚΄κ³ , κ·Έλž˜ν”„μ˜ λ³Όλ‘μ„±μ΄λΌλŠ” κΈ°ν•˜μ  νŠΉμ„±κ³Ό Stern-Brocot Tree 자료ꡬ쑰λ₯Ό ν™œμš©ν•˜μ—¬, μž¬κ·€μ μœΌλ‘œ 값을 κ³„μ‚°ν•˜λŠ” μƒˆλ‘œμš΄ μ•Œκ³ λ¦¬μ¦˜μ„ μ‘°μ‚¬ν•˜μ˜€λ‹€. λ˜ν•œ, 이 μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„ λ³΅μž‘λ„κ°€ \$ \\displaystyle \\tilde{O} \\left( N^{1/3} \\right) \$둜 μ•„μ£Ό νš¨μœ¨μ μž„μ„ λ°ν˜”λ‹€. μ΄λŸ¬ν•œ μ•Œκ³ λ¦¬μ¦˜μ˜ μ•„μ΄λ””μ–΄λŠ” λ‹€μ–‘ν•œ 볼둝 ν•¨μˆ˜μ— λŒ€ν•˜μ—¬ μ ‘λͺ©μ‹œν‚¬ 수 있으며, κ·Έ μ‘μš©μ„±μ΄ λ†’λ‹€. λ‹€μŒ κΈ€μ—λŠ” \$\\sigma (n)\$ 외에 λ‹€λ₯Έ 수둠적 ν•¨μˆ˜μ˜ ꡬ간 합을 효율적으둜 κ³„μ‚°ν•˜λŠ” 방법에 λŒ€ν•˜μ—¬ μ•Œμ•„λ³Έλ‹€. [\# Algorithm](https://youngyojun.github.io/tag/#/Algorithm) [\# Mathematics](https://youngyojun.github.io/tag/#/Mathematics) [μ‹€λ¬΄μ—μ„œ λΉ λ₯΄κ²Œ LCSλ₯Ό κ³„μ‚°ν•˜λŠ” μ‹€μš©μ μΈ Hunt-Szymanski μ•Œκ³ λ¦¬μ¦˜μ— κ΄€ν•˜μ—¬](https://youngyojun.github.io/secmem/2022/03/20/Hunt-Szymanski/ "μ‹€λ¬΄μ—μ„œ λΉ λ₯΄κ²Œ LCSλ₯Ό κ³„μ‚°ν•˜λŠ” μ‹€μš©μ μΈ Hunt-Szymanski μ•Œκ³ λ¦¬μ¦˜μ— κ΄€ν•˜μ—¬") [영 νƒ€λΈ”λ‘œμ˜ 쑰합둠적 μ˜λ―Έμ™€ μ•Œκ³ λ¦¬μ¦˜μ  μ‘μš© (1)](https://youngyojun.github.io/secmem/2021/09/19/young-tableaux/ "영 νƒ€λΈ”λ‘œμ˜ 쑰합둠적 μ˜λ―Έμ™€ μ•Œκ³ λ¦¬μ¦˜μ  μ‘μš© (1)") - λͺ©μ°¨ - 흝어보기 ![Gyojun Youn](https://youngyojun.github.io/assets/images/avatar.gif) Gyojun Youn @youngyojun, GyojunYoun, and yclock's PS Blog [30 포슀트](https://youngyojun.github.io/archives/) [10 μΉ΄ν…Œκ³ λ¦¬](https://youngyojun.github.io/categories/) [18 νƒœκ·Έ](https://youngyojun.github.io/tags/) 1. [1 κ°œμš”](https://youngyojun.github.io/secmem/2022/02/18/sigma-sum-stern-brocot/#%EA%B0%9C%EC%9A%94) 2. [2 문제 제기](https://youngyojun.github.io/secmem/2022/02/18/sigma-sum-stern-brocot/#%EB%AC%B8%EC%A0%9C-%EC%A0%9C%EA%B8%B0) 1. [2\.1 μ•½μˆ˜ ν•¨μˆ˜μ˜ ν•© 문제](https://youngyojun.github.io/secmem/2022/02/18/sigma-sum-stern-brocot/#%EC%95%BD%EC%88%98-%ED%95%A8%EC%88%98%EC%9D%98-%ED%95%A9-%EB%AC%B8%EC%A0%9C) 2. [2\.2 μ •μˆ˜λ‘ μ  μ ‘κ·Ό](https://youngyojun.github.io/secmem/2022/02/18/sigma-sum-stern-brocot/#%EC%A0%95%EC%88%98%EB%A1%A0%EC%A0%81-%EC%A0%91%EA%B7%BC) 3. [3 Stern-Brocot Tree](https://youngyojun.github.io/secmem/2022/02/18/sigma-sum-stern-brocot/#stern-brocot-tree) 1. [3\.1 Farey Sequence](https://youngyojun.github.io/secmem/2022/02/18/sigma-sum-stern-brocot/#farey-sequence) 2. [3\.2 Stern-Brocot Tree](https://youngyojun.github.io/secmem/2022/02/18/sigma-sum-stern-brocot/#stern-brocot-tree-1) 3. [3\.3 유리수 이뢄탐색](https://youngyojun.github.io/secmem/2022/02/18/sigma-sum-stern-brocot/#%EC%9C%A0%EB%A6%AC%EC%88%98-%EC%9D%B4%EB%B6%84%ED%83%90%EC%83%89) 4. [4 κΈ°ν•˜μ  μ ‘κ·Ό](https://youngyojun.github.io/secmem/2022/02/18/sigma-sum-stern-brocot/#%EA%B8%B0%ED%95%98%EC%A0%81-%EC%A0%91%EA%B7%BC) 5. [5 μ‹œκ°„ λ³΅μž‘λ„](https://youngyojun.github.io/secmem/2022/02/18/sigma-sum-stern-brocot/#%EC%8B%9C%EA%B0%84-%EB%B3%B5%EC%9E%A1%EB%8F%84) 6. [6 κ²°λ‘ ](https://youngyojun.github.io/secmem/2022/02/18/sigma-sum-stern-brocot/#%EA%B2%B0%EB%A1%A0) Β© 2020 - 2025 Gyojun Youn Powered by [Jekyll](https://jekyllrb.com/) Theme - [NexT.Muse](https://github.com/simpleyyt/jekyll-theme-next)
Readable Markdown
## κ°œμš” μ •μˆ˜λ‘ μ—μ„œ 주둜 λ‹€λ£¨λŠ” μ€‘μš”ν•œ [수둠적 ν•¨μˆ˜](https://en.wikipedia.org/wiki/Arithmetic_function)λ‘œλŠ” μ•½μˆ˜ ν•¨μˆ˜ \$\\sigma\_k (n)\$, 였일러 ν”Ό ν•¨μˆ˜ \$\\phi (n)\$, λ«ΌλΉ„μš°μŠ€ ν•¨μˆ˜ \$\\mu (n)\$ 등이 μžˆλ‹€. μ΄λŸ¬ν•œ ν•¨μˆ˜μ˜ 학문적 μ€‘μš”λ„λŠ” 이루 말할 수 μ—†μœΌλ©°, 컴퓨터과학와 PS 뢄야에도 μ’…μ’… λ“±μž₯ν•  μ •λ„λ‘œ λ‹€μ–‘ν•˜κ²Œ ν™œμš©λœλ‹€. λ³Έ 글은 수둠적 ν•¨μˆ˜μ˜ λŒ€ν‘œμΈ μ•½μˆ˜ ν•¨μˆ˜ \$\\sigma (n)\$의 ꡬ간 합을 효율적으둜 κ³„μ‚°ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ„ μ„œμˆ ν•œλ‹€. ν•¨μˆ˜μ˜ 합을 κΈ°ν•˜μ μœΌλ‘œ ν•΄μ„ν•œ ν›„, 이λ₯Ό Stern-Brocot Tree 자료ꡬ쑰둜 κ³„μ‚°ν•œλ‹€. 이후, 이 μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„ λ³΅μž‘λ„κ°€ \$\\tilde{O} \\left( N^{1/3} \\right)\$둜 μ•„μ£Ό νš¨μœ¨μ μž„μ„ 보인닀. ## 문제 제기 ## μ•½μˆ˜ ν•¨μˆ˜μ˜ ν•© 문제 μ–‘μ˜ μ •μˆ˜ \$n\$에 λŒ€ν•˜μ—¬, \$n\$의 λͺ¨λ“  μ–‘μ˜ μ•½μˆ˜μ˜ \$k\$제곱의 합을 μƒκ°ν•˜μž. 이것이 [μ•½μˆ˜ ν•¨μˆ˜](https://en.wikipedia.org/wiki/Divisor_function) \$\\sigma\_k (n)\$의 μ •μ˜μ΄λ‹€. > \\\[\\sigma\_k (n) := \\sum\_{ d \| n } d^k\\\] 이 κΈ€μ—μ„œλŠ” \$k = 1\$인 μ‹œκ·Έλ§ˆ ν•¨μˆ˜ \$\\sigma (n) := \\sigma\_1 (n)\$에 λŒ€ν•˜μ—¬ 주둜 닀룬닀. 이 값은 \$n\$의 μ•½μˆ˜μ˜ 합을 λ‚˜νƒ€λ‚Έλ‹€. 이제, μ •μˆ˜ \$N\$이 μ£Όμ–΄μ‘Œμ„ λ•Œ, 1λΆ€ν„° \$N\$κΉŒμ§€ μ‹œκ·Έλ§ˆ ν•¨μˆ«κ°’μ˜ ν•© \$ \\displaystyle \\sum\_{k=1}^{N} \\sigma(k) \$을 κ΅¬ν•˜λŠ” 문제λ₯Ό μƒκ°ν•˜μž. ## μ •μˆ˜λ‘ μ  μ ‘κ·Ό \$\\sigma(1) + \\cdots + \\sigma(N)\$의 값은 λ‹€μŒ 쑰건을 λ§Œμ‘±ν•˜λŠ” μ–‘μ˜ μ •μˆ˜ 쌍 \$(n, d)\$의 κ°œμˆ˜μ™€ κ°™λ‹€. > 1. \$d\$λŠ” \$n\$의 μ•½μˆ˜ > 2. \$1 \\le d \\le n \\le N\$ μ΄λŠ” μ‹œκ·Έλ§ˆ ν•¨μˆ˜μ˜ μ •μ˜λ₯Ό 생각할 λ•Œ, \$\\sigma(k)\$의 값은 \$n = k\$인 \$(n, d)\$의 κ°œμˆ˜μ™€ κ°™μœΌλ―€λ‘œ 자λͺ…ν•˜λ‹€. 이제, \$d\$의 값을 κ³ μ •ν•œ ν›„, μœ„μ˜ 쑰건을 λ§Œμ‘±ν•˜λŠ” \$n\$의 개수λ₯Ό μ„Έμž. \$n\$은 \$N\$ μ΄ν•˜μΈ \$d\$의 λ°°μˆ˜λΌμ•Ό ν•˜λ―€λ‘œ, 총 \$ \\displaystyle \\left\\lfloor \\frac{ N }{ d } \\right\\rfloor \$개만큼 μ‘΄μž¬ν•œλ‹€. \\\[\\sum \_{k=1}^{N} \\sigma(k) = \\sum \_{d=1}^{N} \\left\\lfloor \\frac{ N }{ d } \\right\\rfloor\\\] μ΄λŠ” λ‹€λ₯΄κ²Œ ν•΄μ„ν•˜λ©΄, \$y = \\frac{N}{x}\$ κ·Έλž˜ν”„ μ•„λž˜μ— μžˆλŠ” μ–‘μ˜ μ •μˆ˜ 쌍 \$(x, y)\$의 개수λ₯Ό μ„ΈλŠ” 것과 κ°™λ‹€. 곑선 \$xy = N\$은 직선 \$x = y\$에 λŒ€ν•˜μ—¬ λŒ€μΉ­μ΄λ©°, 이 λ‘˜μ˜ ꡐ점은 \$\\left( \\sqrt{N}, \\sqrt{N} \\right)\$μ΄λ―€λ‘œ, μ΅œμ’…μ μœΌλ‘œ μ•„λž˜μ˜ 식을 얻을 수 μžˆλ‹€. \\\[\\sum \_{d=1}^{N} \\left\\lfloor \\frac{ N }{ d } \\right\\rfloor = 2 \\sum \_{x=1}^{ \\left\\lfloor \\sqrt{N} \\right\\rfloor } \\left\\lfloor \\frac{ N }{ x } \\right\\rfloor - { \\left\\lfloor \\sqrt{N} \\right\\rfloor }^2\\\] μš°λ¦¬λŠ” μ‹œκ·Έλ§ˆ ν•¨μˆ˜ \$\\sigma(n)\$의 값을 μ–΄λ–»κ²Œ κ³„μ‚°ν•˜λŠ”μ§€ μ•Œμ§€ μ•Šμ•„λ„, μ‹œκ·Έλ§ˆ ν•¨μˆ˜μ˜ 합을 \$O \\left( \\sqrt{N} \\right)\$λ§Œμ— μ‰½κ²Œ 계산할 수 있게 λ˜μ—ˆλ‹€. κ·ΈλŸ¬λ‚˜ \$N\$이 \$10^{18}\$-scale둜 μ•„μ£Ό 큰 수라면, μš°λ¦¬λŠ” 이보닀도 λ”μš± 효율적인 방법을 μ°Ύμ•„μ•Ό ν•œλ‹€. ## Stern-Brocot Tree 효율적인 μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬μƒν•˜κΈ° 전에, 페리 μˆ˜μ—΄κ³Ό Stern-Brocot Tree μžλ£Œκ΅¬μ‘°μ— λŒ€ν•˜μ—¬ λ¨Όμ € μ•Œμ•„λ³΄μž. ## Farey Sequence Stern-Brocot Tree에 λŒ€ν•˜μ—¬ λ…Όν•˜κΈ° 전에, λ¨Όμ € [페리 μˆ˜μ—΄](https://en.wikipedia.org/wiki/Farey_sequence)의 μ •μ˜λ₯Ό μ†Œκ°œν•œλ‹€. \$n\$번째 페리 μˆ˜μ—΄ \$F\_n\$λŠ” λ‹€μŒμ„ λ§Œμ‘±ν•˜λŠ” λͺ¨λ“  κΈ°μ•½λΆ„μˆ˜ \$ \\displaystyle \\frac{a}{b} \$λ₯Ό μ˜€λ¦„μ°¨μˆœμœΌλ‘œ λ‚˜μ—΄ν•œ μˆ˜μ—΄μ΄λ‹€. > 1. \$0 \\le b \\le a \\le n\$ > 2. \$\\gcd (a, b) = 1\$ 예λ₯Ό λ“€μ–΄, λͺ‡λͺ‡μ˜ \$n\$에 λŒ€ν•˜μ—¬ 페리 μˆ˜μ—΄ \$F\_n\$을 λ‚˜μ—΄ν•˜λ©΄ μ•„λž˜μ™€ κ°™λ‹€. > \\\[F \_1 = \\left\\{ \\frac{0}{1}, \\frac{1}{1} \\right\\}\\\] \\\[F \_2 = \\left\\{ \\frac{0}{1}, \\frac{1}{2}, \\frac{1}{1} \\right\\}\\\] \\\[F \_5 = \\left\\{ \\frac{0}{1}, \\frac{1}{5}, \\frac{1}{4}, \\frac{1}{3}, \\frac{2}{5}, \\frac{1}{2}, \\frac{3}{5}, \\frac{2}{3}, \\frac{3}{4}, \\frac{4}{5}, \\frac{1}{1} \\right\\}\\\] μ—¬κΈ°μ„œ, 페리 μˆ˜μ—΄ \$F\_n\$μ—μ„œ μΈμ ‘ν•œ 두 유리수λ₯Ό β€œμ°¨μˆ˜ \$n\$μ—μ„œ 페리 μ΄μ›ƒν•˜λ‹€β€λΌκ³  ν•œλ‹€. 페리 이웃에 κ΄€ν•œ μ€‘μš”ν•œ 정리λ₯Ό ν•˜λ‚˜ μ†Œκ°œν•œλ‹€. > μ°¨μˆ˜μ— 상관없이, 페리 μ΄μ›ƒν•œ 두 유리수 \$ \\displaystyle \\frac{a}{b} \> \\frac{c}{d} \$λŠ” \$ad - bc = 1\$을 λ§Œμ‘±ν•œλ‹€. 이 μ •λ¦¬λŠ” μ•„λž˜μ— μ„œμˆ ν•  Stern-Brocot Tree에 κ΄€ν•œ μ •λ¦¬μ˜ 기반이 λœλ‹€. ## Stern-Brocot Tree 페리 μˆ˜μ—΄ \$F\_n\$을 ν™•μž₯ν•˜μ—¬, 각 유리수의 μ—­μˆ˜κΉŒμ§€ λ“±μž₯ν•˜λŠ” μˆ˜μ—΄μ„ μƒκ°ν•˜μž. νŽΈμ˜μƒ, \$ \\displaystyle \\frac{1}{0} = + \\infty \$둜 μƒκ°ν•˜λ©΄, 이 μˆ˜μ—΄μ€ \$ \\displaystyle \\frac{0}{1} = 0 \$ 이상 \$ \\displaystyle \\frac{1}{0} = + \\infty \$ μ΄ν•˜μΈ κΈ°μ•½λΆ„μˆ˜λ₯Ό 잘 λ‚˜μ—΄ν•  것이닀. μ‹€μ œλ‘œ, \$0\$ μ΄μƒμ˜ λͺ¨λ“  μœ λ¦¬μˆ˜λŠ” μΆ©λΆ„νžˆ 큰 \$n\$에 λŒ€ν•˜μ—¬ ν™•μž₯된 페리 μˆ˜μ—΄ \$F’ \_n\$에 μ •ν™•ν•˜κ²Œ ν•œ 번 λ“±μž₯함을 증λͺ…ν•  수 μžˆλ‹€. 이제, 깊이 \$n\$에 ν•΄λ‹Ήν•˜λŠ” 측에 ν™•μž₯된 페리 μˆ˜μ—΄ \$F’ \_n\$을 적어, μ•„λž˜ κ·Έλ¦Όκ³Ό 같은 이진 트리λ₯Ό μƒκ°ν•˜μž. [![](https://youngyojun.github.io/assets/images/posts/2022-02-18-sigma-sum-stern-brocot/SternBrocotTree.png)](https://youngyojun.github.io/assets/images/posts/2022-02-18-sigma-sum-stern-brocot/SternBrocotTree.png) **κ·Έλ¦Ό 1: Stern–Brocot Tree** ν™•μž₯된 페리 μˆ˜μ—΄ \$F' \_1\$λΆ€ν„° \$F' \_4\$κΉŒμ§€ ν™œμš©ν•˜μ—¬ 깊이 4의 Stern-Brocot Treeλ₯Ό λ§Œλ“€ 수 μžˆλ‹€. 이 νŠΈλ¦¬λŠ” (1) **μ™„μ „ 이진 검색 트리**이며, (2) **λͺ¨λ“  μ–‘μ˜ μœ λ¦¬μˆ˜κ°€ μ •ν™•ν•˜κ²Œ ν•œ λ²ˆμ”© λ“±μž₯**ν•œλ‹€λŠ” κ°•λ ₯ν•œ μ„±μ§ˆμ„ κ°€μ§„λ‹€. λ˜ν•œ, 트리 κ·Έ 자체둜 μœ λ¦¬μˆ˜μ™€ μžμ—°μˆ˜ κ°„μ˜ μΌλŒ€μΌ λŒ€μ‘μ„ 잘 보여쀀닀. μ΄λŸ¬ν•œ μ™„μ „ 이진 검색 트리λ₯Ό [Stern-Brocot Tree](https://en.wikipedia.org/wiki/Stern%E2%80%93Brocot_tree)라고 λΆ€λ₯Έλ‹€. ## 유리수 이뢄탐색 μ•Œκ³ λ¦¬μ¦˜ λΆ„μ•Όμ—μ„œ Stern-Brocot TreeλŠ” 유리수λ₯Ό λŒ€μƒμœΌλ‘œ 이뢄탐색을 ν•  수 있게 λ˜μ—ˆλ‹€λŠ” μ μ—μ„œ κ·Έ μ˜λ―Έκ°€ κΉŠλ‹€. 두 유리수 \$ \\displaystyle \\frac{a}{b} \< \\frac{c}{d} \$에 λŒ€ν•˜μ—¬, \$\\displaystyle \\frac{a}{b}\$ 초과 \$\\displaystyle \\frac{c}{d}\$ 미만의 λͺ¨λ“  유리수λ₯Ό λ‹΄κ³  μžˆλŠ” Stern-Brocot Subtree의 루트 정점은 \$\\displaystyle \\frac{a+c}{b+d}\$이닀. 이λ₯Ό κ·ΈλŒ€λ‘œ ν™œμš©ν•˜λ©΄, λ‹€μŒκ³Ό 같은 이뢄탐색 μ•Œκ³ λ¦¬μ¦˜μ„ 생각할 수 μžˆλ‹€. > 1. \$ \\displaystyle s := \\frac{a}{b} = \\frac{0}{1} \$, \$ \\displaystyle e := \\frac{c}{d} = \\frac{1}{0} \$으둜 μ„€μ •ν•œλ‹€. 이제, 각 μŠ€ν…λ§ˆλ‹€ \$s\$ 초과 \$e\$ 미만인 μœ λ¦¬μˆ˜μ— λŒ€ν•˜μ—¬ 이뢄탐색을 μˆ˜ν–‰ν•œλ‹€. > 2. 쀑간값 \$ \\displaystyle m := \\frac{ a+c }{ b+d } \$을 작자. > 1. λ§Œμ•½, \$m\$이 찾고자 ν•˜λŠ” 유리수라면, 탐색을 λ©ˆμΆ˜λ‹€. > 2. μ•„λ‹ˆλΌλ©΄, 찾고자 ν•˜λŠ” μœ λ¦¬μˆ˜μ™€ \$m\$에 λŒ€ν•œ λŒ€μ†ŒλΉ„κ΅λ₯Ό μˆ˜ν–‰ν•œλ‹€. > 3. \$(s, e)\$λ₯Ό \$(s, m)\$ ν˜Ήμ€ \$(m, e)\$둜 λŒ€μž…ν•œ ν›„, μœ„μ˜ 과정을 λ°˜λ³΅ν•œλ‹€. μ΄λŸ¬ν•œ 이뢄탐색 과정을 ν†΅ν•˜μ—¬ μ΅œμ’…μ μœΌλ‘œ κΈ°μ•½λΆ„μˆ˜ \$ \\displaystyle \\frac{x}{y} \$λ₯Ό μ–»μ—ˆλ‹€λ©΄, 탐색 νšŸμˆ˜λŠ” Stern-Brocot Treeμ—μ„œ 정점 \$ \\displaystyle \\frac{x}{y} \$의 κΉŠμ΄μ™€ κ°™μœΌλ―€λ‘œ \$O(x+y)\$이닀. κ³Όμ • 2.λŠ” Stern-Brocot Tree의 μ •μ μ—μ„œ ν•œ μͺ½ λ°©ν–₯으둜 λ‚΄λ €κ°€λŠ” 것을 λ‚˜νƒ€λ‚Έλ‹€. μ—¬κΈ°μ„œ, μ—°μ†μœΌλ‘œ λͺ‡ λ²ˆκΉŒμ§€ 같은 λ°©ν–₯으둜 λ‚΄λ €κ°€λŠ”μ§€λ₯Ό μ•Œμ•„λ‚Ό 수 μžˆλ‹€λ©΄ 탐색 횟수λ₯Ό 쀄일 수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, 쀑간값 \$m\$보닀 μž‘μ€ μͺ½μœΌλ‘œ 탐색을 μ΄μ–΄λ‚˜κ°€μ•Ό ν•œλ‹€λ©΄, \$e\$ 값을 \$ \\displaystyle \\frac{ ta + c }{ tb + d } \$ 꼴둜 μ œν•œν•  수 μžˆλ‹€. 이것이 κ°€λŠ₯ν•œ μ΅œλŒ€ μ •μˆ˜ \$t\$λ₯Ό μ΄λΆ„νƒμƒ‰μœΌλ‘œ 찾으면, 전체 탐색 횟수λ₯Ό \$O(x+y)\$μ—μ„œ \$O \\left( x + \\lg y \\right)\$둜 크게 κ°œμ„ ν•  수 μžˆλ‹€. ## κΈ°ν•˜μ  μ ‘κ·Ό λ‹€μ‹œ μ›λž˜μ˜ 문제둜 λŒμ•„μ˜€μž. μš°λ¦¬λŠ” μ•„λž˜μ˜ κ·Έλ¦Όκ³Ό 같이 \$ \\displaystyle y = \\frac{N}{x} \$ 곑선 μ•„λž˜μ˜ νšŒμƒ‰ μ˜μ—­μ— μ‘΄μž¬ν•˜λŠ” μ–‘μ˜ μ •μˆ˜ 쌍 \$(x, y)\$의 수λ₯Ό μ„Έμ–΄μ•Ό ν•œλ‹€. [![](https://youngyojun.github.io/assets/images/posts/2022-02-18-sigma-sum-stern-brocot/1.png)](https://youngyojun.github.io/assets/images/posts/2022-02-18-sigma-sum-stern-brocot/1.png) **κ·Έλ¦Ό 2: \$xy = 20\$ κ·Έλž˜ν”„μ™€ νšŒμƒ‰ μ˜μ—­** \$N = 20\$이라면 μœ„ νšŒμƒ‰ μ˜μ—­ λ‚΄λΆ€μ˜ μ •μˆ˜ 점의 개수λ₯Ό μ„Έμ–΄μ•Ό ν•œλ‹€. 이 κ·Έλž˜ν”„μ—μ„œ κΈ°μšΈκΈ°κ°€ \$-1\$인 접선을 κΈ‹μž. μ•„λž˜μ˜ 그림에 접점 \$G\$, \$x\$ μΆ•κ³Ό \$y\$ μΆ•κ³Όμ˜ ꡐ점 \$P \_x\$, \$P \_y\$을 λ‚˜νƒ€λ‚΄μ—ˆλ‹€. [![](https://youngyojun.github.io/assets/images/posts/2022-02-18-sigma-sum-stern-brocot/2.png)](https://youngyojun.github.io/assets/images/posts/2022-02-18-sigma-sum-stern-brocot/2.png) **κ·Έλ¦Ό 3: \$xy = 20\$ κ·Έλž˜ν”„μ™€ 기울기 \$-1\$의 μ ‘μ„ ** 접점 \$G\$와 μ€‘μš”ν•œ ꡐ점 두 개 \$P \_x\$, \$P \_y\$λ₯Ό λ‚˜νƒ€λ‚΄μ—ˆλ‹€. μ ‘μ„  μ•„λž˜ μ˜μ—­μ˜ μ •μˆ˜ 점의 κ°œμˆ˜λŠ” μ‰½κ²Œ μ…€ 수 μžˆλ‹€. μ—¬κΈ°μ„œ μ•„μ΄λ””μ–΄λŠ” μ΄λŸ¬ν•˜λ‹€. 곑선 μ•„λž˜μ˜ μ •μˆ˜ 점의 개수λ₯Ό μ„ΈλŠ” 것은 μ–΄λ ΅μ§€λ§Œ, 직선 μ•„λž˜μ˜ μ •μˆ˜ 점의 μˆ˜λŠ” 사칙연산을 μ΄μš©ν•˜μ—¬ μ•„μ£Ό μ‰½κ²Œ μ…€ 수 μžˆλ‹€. μš°λ¦¬λŠ” 남은 μ˜μ—­μ— λŒ€ν•˜μ—¬ μ λ‹Ήν•œ 기울기의 접선을 κ·Έμ–΄ 점의 개수λ₯Ό μ„ΈλŠ” μž‘μ—…μ„ μž¬κ·€μ μœΌλ‘œ λ°˜λ³΅ν•˜κ³ μž ν•œλ‹€. μ •μˆ˜ 점의 κ°œμˆ˜λŠ” μœ ν•œν•˜λ―€λ‘œ, μ ‘μ„ μ˜ 기울기λ₯Ό 잘 μ„€μ •ν•˜μ˜€λ‹€λ©΄, μ΄λŸ¬ν•œ μž‘μ—…μ€ μœ ν•œ μ‹œκ°„ μ•ˆμ— μ’…λ£Œν•  것이닀. 편의λ₯Ό μœ„ν•˜μ—¬, **κ·Έλ¦Ό 4**와 같은 μ˜μ—­ λ‚΄λΆ€μ˜ μ •μˆ˜ 점의 개수λ₯Ό \$\\displaystyle f \\left( x \_0, y \_0, \\frac{a}{b}, \\frac{c}{d} \\right)\$둜 λ‚˜νƒ€λ‚΄μž. 이에 λŒ€ν•œ μ—„λ°€ν•œ μ •μ˜λŠ” λ‹€μŒκ³Ό κ°™λ‹€. > 음이 μ•„λ‹Œ μ •μˆ˜ \$x \_0\$, \$y \_0\$κ³Ό 페리 μ΄μ›ƒν•œ 두 κΈ°μ•½λΆ„μˆ˜ \$\\displaystyle \\frac{a}{b}\$, \$\\displaystyle \\frac{c}{d}\$에 λŒ€ν•˜μ—¬, > > 1. 점 \$P \\left( x \_0, y \_0 \\right)\$을 작고 > 2. 점 \$P\$λ‘œλΆ€ν„° 각각 기울기 \$\\displaystyle - \\frac{a}{b}\$, \$\\displaystyle - \\frac{c}{d}\$의 접선을 κ·Έμ–΄ ꡐ점 \$Q\$, \$R\$λ₯Ό μž‘μ•˜μ„ λ•Œ > 3. 직선과 κ³‘μ„ μœΌλ‘œ λ‹«νžŒ 삼각 μ˜μ—­ \$PQR\$ λ‚΄λΆ€μ˜ μ •μˆ˜ 점의 개수λ₯Ό \$\\displaystyle f \\left( x \_0, y \_0, \\frac{a}{b}, \\frac{c}{d} \\right)\$둜 μ •μ˜ν•œλ‹€. > 4. μΈμžκ°€ μƒκΈ°ν•œ 쑰건을 λ§Œμ‘±ν•˜μ§€ μ•ŠμœΌλ©΄, νŽΈμ˜μƒ \$\\displaystyle f \\left( x \_0, y \_0, \\frac{a}{b}, \\frac{c}{d} \\right) = 0\$으둜 μ •μ˜ν•œλ‹€. [![](https://youngyojun.github.io/assets/images/posts/2022-02-18-sigma-sum-stern-brocot/3.png)](https://youngyojun.github.io/assets/images/posts/2022-02-18-sigma-sum-stern-brocot/3.png) **κ·Έλ¦Ό 4: 점 \$P\$, \$Q\$, \$R\$κ³Ό νšŒμƒ‰ 삼각 μ˜μ—­** \$\\displaystyle f \\left( x \_0, y \_0, \\frac{a}{b}, \\frac{c}{d} \\right)\$의 μ •μ˜μ—μ„œ μ‚¬μš©λ˜λŠ” μ„Έ 점을 λ‚˜νƒ€λ‚΄μ—ˆλ‹€. μš°λ¦¬λŠ” κ²°κ΅­ \$\\displaystyle f \\left( x \_0, y \_0, \\frac{a}{b}, \\frac{c}{d} \\right)\$κ°€ 0이 될 λ•ŒκΉŒμ§€ μž¬κ·€μ μœΌλ‘œ 탐색을 μ΄μ–΄λ‚˜κ°€μ•Ό ν•œλ‹€. λ”°λΌμ„œ, 이 ν•¨μˆ«κ°’μ„ 계산할 수 μžˆμ–΄μ•Ό ν•œλ‹€. 이λ₯Ό μ–΄λ–»κ²Œ 계산할 수 μžˆμ„κΉŒ? **κ·Έλ¦Ό 4**의 두 접선을 각각 μƒˆλ‘œμš΄ μΆ•μœΌλ‘œ 작고, 점 \$P\$λ₯Ό μ›μ μœΌλ‘œ μƒκ°ν•œ μƒˆλ‘œμš΄ μ’Œν‘œκ³„ \$u-v\$λ₯Ό μƒκ°ν•˜μž. \$u\$ 좕이 직선 \$PR\$, \$v\$ 좕이 직선 \$PQ\$이닀. 이 경우 νšŒμƒ‰ μ˜μ—­μ€ λ‹€μŒκ³Ό 같이 λ³€ν™˜λœλ‹€. [![](https://youngyojun.github.io/assets/images/posts/2022-02-18-sigma-sum-stern-brocot/4.png)](https://youngyojun.github.io/assets/images/posts/2022-02-18-sigma-sum-stern-brocot/4.png) **κ·Έλ¦Ό 5: λ³€ν™˜λœ μƒˆλ‘œμš΄ μ˜μ—­** λ“œλ””μ–΄ μš°λ¦¬λŠ” μž¬κ·€μ μœΌλ‘œ μ •μˆ˜ 점의 개수λ₯Ό μ…€ 수 있게 λ˜μ—ˆλ‹€\! ## μ‹œκ°„ λ³΅μž‘λ„ μž¬κ·€μ μœΌλ‘œ λ³€ν•˜λŠ” μ ‘μ„ μ˜ κΈ°μšΈκΈ°λŠ” Stern-Brocot Treeμ—μ„œ 경둜λ₯Ό 따라 μ•„λž˜λ‘œ λ‚΄λ €κ°€λŠ” 것과 κ°™μœΌλ―€λ‘œ, μ‹œκ°„ λ³΅μž‘λ„λ₯Ό μ•„λž˜μ™€ 같이 μ“Έ 수 μžˆλ‹€. \\\[O \\left( \\sum \_{ ad - bc = 1 } I \\left\[ \\sqrt{ \\frac{N}{ c/d } } - \\sqrt{ \\frac{N}{ a/b } } \\ge b + d \\right\] \\right)\\\] \\\[= O \\left( \\sum \_{ ad - bc = 1 } I \\left\[ \\frac{ \\sqrt{bc + 1} - \\sqrt{bc} }{ \\sqrt{ac} } \\ge \\frac{ b + d }{ \\sqrt{N} } \\right\] \\right)\\\] \\\[= O \\left( \\sum \_{ ad - bc = 1} I \\left\[ \\frac{1}{ \\sqrt{ab} c } \\ge \\frac{b+d}{\\sqrt{N}} \\right\] \\right) = O \\left( \\sum \_{ad - bc = 1} I \\left\[ ab c^2 \\left( b + d \\right)^2 \\ge N \\right\] \\right)\\\] λ§ˆμ§€λ§‰ μ€„μ—μ„œλŠ” \$ \\displaystyle \\sqrt{x+1} - \\sqrt{x} = O \\left( \\frac{1}{ \\sqrt{x} } \\right) \$κ°€ μ‚¬μš©λ˜μ—ˆλ‹€. 이제, \$t = bc\$ μΉ˜ν™˜μ„ μ μš©ν•˜λ©΄, \\\[O \\left( \\sum \_{t} \\sum \_{ b \| t} \\sum \_{ a \| (t+1) } I \\left\[ \\frac{t^4}{ab} + t^3 + ab t^2 \\ge N \\right\] \\right)\\\] \\\[= O \\left( \\sum \_{t = 1}^{N^{1/3}} \\sigma(t) \\sigma(t+1) \\right) = O \\left( \\sum \_{t=1}^{N^{1/3}} \\sigma^2 (t) \\right)\\\] μ—„λ°€ν•œ 증λͺ…μ΄λ‚˜ 식 μ „κ°œλŠ” μƒλž΅ν•˜μ˜€λ‹€. 이제, λ‹€μŒμ˜ 잘 μ•Œλ €μ§„ 정리λ₯Ό μ μš©ν•˜μž. > \\\[\\sum \_{k=1}^{N} \\sigma^2 (k) = \\Theta \\left( N \\lg^3 N \\right)\\\] 즉, μ„œμˆ ν•œ μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„ λ³΅μž‘λ„λŠ” \$ \\displaystyle O \\left( N^{ \\frac{1}{3} } \\lg^3 N \\right) = \\tilde{O}\\left( N^{ \\frac{1}{3} } \\right) \$ μž„μ„ μ•Œ 수 μžˆλ‹€. ## κ²°λ‘  수둠적 ν•¨μˆ˜λŠ” μ •μˆ˜λ‘  뿐만 μ•„λ‹ˆλΌ 컴퓨터과학, μ•Œκ³ λ¦¬μ¦˜, PS 뢄야에도 μ‚¬μš©λ  μ •λ„λ‘œ μ€‘μš”ν•˜λ©° κ·Έ 폭이 μ•„μ£Ό λ„“λ‹€. μš°λ¦¬λŠ” λŒ€ν‘œμ μΈ 수둠적 ν•¨μˆ˜ \$\\sigma (n)\$의 ꡬ간 ν•© \$ \\displaystyle \\sum \_{k=1}^{N} \\sigma(k) \$을 효율적으둜 κ³„μ‚°ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ— λŒ€ν•˜μ—¬ μ•Œμ•„λ³΄μ•˜λ‹€. 일반적인 식 μ „κ°œλ‘œλŠ” \$ \\displaystyle O \\left( \\sqrt{N} \\right) \$κΉŒμ§€ μ‹œκ°„ λ³΅μž‘λ„λ₯Ό 쀄일 수 μžˆμ—ˆλ‹€. κ·ΈλŸ¬λ‚˜, \$N\$이 μ•„μ£Ό 큰 수라면 이 방법도 아직은 λŠλ¦¬λ‹€. μš°λ¦¬λŠ” \$ \\displaystyle y = \\frac{N}{x} \$ κ·Έλž˜ν”„μ™€ κ΅¬ν•˜κ³ μž ν•˜λŠ” κ°’κ³Όμ˜ 관계λ₯Ό μ•Œμ•„λ‚΄κ³ , κ·Έλž˜ν”„μ˜ λ³Όλ‘μ„±μ΄λΌλŠ” κΈ°ν•˜μ  νŠΉμ„±κ³Ό Stern-Brocot Tree 자료ꡬ쑰λ₯Ό ν™œμš©ν•˜μ—¬, μž¬κ·€μ μœΌλ‘œ 값을 κ³„μ‚°ν•˜λŠ” μƒˆλ‘œμš΄ μ•Œκ³ λ¦¬μ¦˜μ„ μ‘°μ‚¬ν•˜μ˜€λ‹€. λ˜ν•œ, 이 μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„ λ³΅μž‘λ„κ°€ \$ \\displaystyle \\tilde{O} \\left( N^{1/3} \\right) \$둜 μ•„μ£Ό νš¨μœ¨μ μž„μ„ λ°ν˜”λ‹€. μ΄λŸ¬ν•œ μ•Œκ³ λ¦¬μ¦˜μ˜ μ•„μ΄λ””μ–΄λŠ” λ‹€μ–‘ν•œ 볼둝 ν•¨μˆ˜μ— λŒ€ν•˜μ—¬ μ ‘λͺ©μ‹œν‚¬ 수 있으며, κ·Έ μ‘μš©μ„±μ΄ λ†’λ‹€. λ‹€μŒ κΈ€μ—λŠ” \$\\sigma (n)\$ 외에 λ‹€λ₯Έ 수둠적 ν•¨μˆ˜μ˜ ꡬ간 합을 효율적으둜 κ³„μ‚°ν•˜λŠ” 방법에 λŒ€ν•˜μ—¬ μ•Œμ•„λ³Έλ‹€.
Shard143 (laksa)
Root Hash2566890010099092343
Unparsed URLio,github!youngyojun,/secmem/2022/02/18/sigma-sum-stern-brocot/ s443