DOJ logoDOJ
문제
최근 추가된 문제들저장한 문제문제집
카테고리DLC대회그룹팀게시판
랭킹
문제 풀이 랭킹스트릭 랭킹DOJ Power 랭킹
현황
문제 제안로그인회원가입
DOJ logoDOJ

OI 서브태스크 채점, Elo 레이팅, Discord 인증을 갖춘 커뮤니티 온라인 저지.

문제
문제 목록카테고리
커뮤니티
대회랭킹게시판공지사항외부 대회 개최이용 안내
계정
로그인회원가입채점 현황
정책
이용약관DLC 이용 규칙개인정보 처리방침API 사용 설명서언어별 채점 환경대회 순위 보상레이팅과 퍼포먼스
© 2026 DOJ
모든 권리 보유
해설

루미의 생일파티장 꾸미기 (EX)

문제로 돌아가기

해설

  • 이 문제는 NNN이 커서 φ(1),…,φ(N)\varphi(1), \ldots, \varphi(N)φ(1),…,φ(N)을 배열에 담을 수 없습니다. 그래서 ∑x=1Nφ(xL)\sum_{x=1}^{N} \varphi(xL)∑x=1N​φ(xL)을 다른 식으로 바꿉니다.
  • LLL을 소인수분해한 결과를 L=p1e1⋯pkekL = p_1^{e_1} \cdots p_k^{e_k}L=p1e1​​⋯라 하고, 라 합시다.
  • P(x)\mathbb{P}(x)P(x)는 xxx의 소인수 집합입니다. P(1)=∅\mathbb{P}(1) = \emptysetP(1)=∅입니다.
  • 예를 들어, P(12)={2,3}\mathbb{P}(12) = \{2, 3\}P(12)={2,3}입니다.

Claim

∑x=1Nφ(xL)=φ(L)∑P(d)⊆P(L)∑x=1⌊Nd⌋φ(x)\sum_{x=1}^{N} \varphi(xL) = \varphi(L) \sum_{\mathbb{P}(d) \subseteq \mathbb{P}(L)} \sum_{x=1}^{\left\lfloor \frac{N}{d} \right\rfloor} \varphi(x)x=1∑N​φ(xL)=
  • P(d)⊆P(L)\mathbb{P}(d) \subseteq \mathbb{P}(L)P(d)⊆P(L)은 ddd가 LLL의 소인수만으로 이루어진 수라는 뜻입니다.
  • 예를 들어 L=12L = 12L=12이면 이 조건을 만족하는 는 등이 있습니다.

증명

  • φ(xL)=p1e1−1⋯pkek−1φ(xp1⋯pk)\varphi(xL) = p_1^{e_1 - 1} \cdots p_k^{e_k - 1} \varphi(x p_1 \cdots p_k)φ(xL)=p1e1​−1​입니다.

k=1k = 1k=1일 때 L=pL = pL=p라 하면

∑x=1Nφ(xp)=∑p∣xx≤Nφ(xp)+∑p∤xx≤Nφ(xp)=∑p∣xx≤Np φ(x)+∑

입니다. 같은 전개를 반복하면 ∑x=1Nφ(xp)=φ(p)∑j≥0Φ(⌊Npj⌋)\sum_{x=1}^{N} \varphi(xp) = \varphi(p) \sum_{j \ge 0} \Phi\left(\left\lfloor \frac{N}{p^j} \right\rfloor\right)∑x=1N​φ(xp)=φ(p)이고, 인 는 뿐이므로 일 때 Claim이 성립합니다.

  • 소인수가 kkk개인 L=p1⋯pkL = p_1 \cdots p_kL=p1​⋯pk​에서 Claim이 성립한다고 가정하고, L′=이라 합시다.
∑x=1Nφ(xL′)=∑pk+1∣xx≤Nφ(xL′)+∑pk+1∤xx≤Nφ(xL′)=∑pk
  • 같은 전개를 반복하고, 각 합에 가정을 적용합니다. ⌊⌊N/a⌋/b⌋=⌊N/(ab)⌋\left\lfloor \left\lfloor N/a \right\rfloor / b \right\rfloor = \left\lfloor N/(ab) \right\rfloor⌊⌊N/a⌋/b⌋=⌊N/(ab)⌋를 쓰면
∑x=1Nφ(xL′)=φ(pk+1)∑j≥0∑x=1⌊N/pk+1j⌋φ(xL)=φ(pk+1) φ(L)∑j≥0∑P(d)⊆P(L)Φ(⌊Npk+
  • φ(pk+1) φ(L)=φ(L′)\varphi(p_{k+1})\,\varphi(L) = \varphi(L')φ(pk+1​)φ(L)=φ(L′)이고, 는 인 수를 한 번씩 모두 지납니다. 따라서 일 때도 Claim이 성립합니다.

계산

  • 이제 P(d)⊆P(L)\mathbb{P}(d) \subseteq \mathbb{P}(L)P(d)⊆P(L)인 ddd를 모두 구하고, 각 ddd에 대해 Φ(⌊Nd⌋)\Phi\left(\left\lfloor \frac{N}{d} \right\rfloor\right)Φ를 구해 더한 뒤 을 곱하면 됩니다.
p
kek​​
Φ(n)=∑x=1nφ(x)\Phi(n) = \sum_{x=1}^{n} \varphi(x)Φ(n)=∑x=1n​φ(x)
φ(L)P(d)⊆P(L)∑​x=1∑⌊dN​⌋​φ(x)
dd
d
1,2,3,4,6,8,9,12,16,181, 2, 3, 4, 6, 8, 9, 12, 16, 181,2,3,4,6,8,9,12,16,18
⋯
pkek​−1​
φ
(
x
p1​
⋯
pk​
)
  • 따라서 이 Claim이 LLL이 square-free일 때 성립함을 보이면 충분합니다.
  • LLL이 서로 다른 소수 kkk개의 곱이라 하고, kkk에 대한 귀납법으로 증명합니다.
  • p∤xx≤N(p−1) φ(x)=∑p∣xx≤Nφ(x)+∑p∣xx≤N(p−1) φ(x)+∑p∤xx≤N(p−1) φ(x)=∑p∣xx≤Nφ(x)+∑x=1N(p−1) φ(x)=∑x=1⌊Np⌋φ(xp)+∑x=1N(p−1) φ(x)=∑x=1⌊Np⌋φ(xp)+φ(p)∑x=1Nφ(x)=∑x=1⌊Np2⌋φ(xp)+φ(p)∑x=1⌊Np⌋φ(x)+φ(p)∑x=1Nφ(x)=⋯\begin{aligned} \sum_{x=1}^{N} \varphi(xp) &= \sum_{\substack{p \mid x \\ x \le N}} \varphi(xp) + \sum_{\substack{p \nmid x \\ x \le N}} \varphi(xp) \\ &= \sum_{\substack{p \mid x \\ x \le N}} p\,\varphi(x) + \sum_{\substack{p \nmid x \\ x \le N}} (p - 1)\,\varphi(x) \\ &= \sum_{\substack{p \mid x \\ x \le N}} \varphi(x) + \sum_{\substack{p \mid x \\ x \le N}} (p - 1)\,\varphi(x) + \sum_{\substack{p \nmid x \\ x \le N}} (p - 1)\,\varphi(x) \\ &= \sum_{\substack{p \mid x \\ x \le N}} \varphi(x) + \sum_{x=1}^{N} (p - 1)\,\varphi(x) \\ &= \sum_{x=1}^{\left\lfloor \frac{N}{p} \right\rfloor} \varphi(xp) + \sum_{x=1}^{N} (p - 1)\,\varphi(x) \\ &= \sum_{x=1}^{\left\lfloor \frac{N}{p} \right\rfloor} \varphi(xp) + \varphi(p) \sum_{x=1}^{N} \varphi(x) \\ &= \sum_{x=1}^{\left\lfloor \frac{N}{p^2} \right\rfloor} \varphi(xp) + \varphi(p) \sum_{x=1}^{\left\lfloor \frac{N}{p} \right\rfloor} \varphi(x) + \varphi(p) \sum_{x=1}^{N} \varphi(x) = \cdots \end{aligned}
    x=1∑N​φ(xp)​=p∣xx≤N​∑​φ(xp)+p∤xx≤N​∑​φ(xp)=p∣xx≤N​∑​pφ(x)+=p∣xx≤N​∑​φ(x)+p=p∣xx≤N​∑​φ(x)+x=1∑=x=1∑⌊pN​⌋​φ(xp)+=x=1∑⌊pN​⌋​φ(xp)+=x=1∑⌊p2N​⌋​​
    ∑j≥0​
    Φ
    (⌊pjN​⌋)
    P(d)⊆{p}\mathbb{P}(d) \subseteq \{p\}P(d)⊆{p}
    ddd
    pjp^jpj
    k=1k = 1k=1
    Lpk+1L' = L p_{k+1}
    L′=Lpk+1​
  • k=1k = 1k=1과 같은 방법으로 전개하면
  • +1∣xx≤Npk+1 φ(xL)+∑pk+1∤xx≤N(pk+1−1) φ(xL)=∑pk+1∣xx≤Nφ(xL)+∑pk+1∣xx≤N(pk+1−1) φ(xL)+∑pk+1∤xx≤N(pk+1−1) φ(xL)=∑pk+1∣xx≤Nφ(xL)+∑x=1Nφ(pk+1) φ(xL)=∑x=1⌊Npk+1⌋φ(xLpk+1)+∑x=1Nφ(pk+1) φ(xL)=∑x=1⌊Npk+1⌋φ(xL′)+φ(pk+1)∑x=1Nφ(xL)=∑x=1⌊Npk+12⌋φ(xL′)+φ(pk+1)∑x=1⌊Npk+1⌋φ(xL)+φ(pk+1)∑x=1Nφ(xL)=⋯\begin{aligned} \sum_{x=1}^{N} \varphi(xL') &= \sum_{\substack{p_{k+1} \mid x \\ x \le N}} \varphi(xL') + \sum_{\substack{p_{k+1} \nmid x \\ x \le N}} \varphi(xL') \\ &= \sum_{\substack{p_{k+1} \mid x \\ x \le N}} p_{k+1}\,\varphi(xL) + \sum_{\substack{p_{k+1} \nmid x \\ x \le N}} (p_{k+1} - 1)\,\varphi(xL) \\ &= \sum_{\substack{p_{k+1} \mid x \\ x \le N}} \varphi(xL) + \sum_{\substack{p_{k+1} \mid x \\ x \le N}} (p_{k+1} - 1)\,\varphi(xL) + \sum_{\substack{p_{k+1} \nmid x \\ x \le N}} (p_{k+1} - 1)\,\varphi(xL) \\ &= \sum_{\substack{p_{k+1} \mid x \\ x \le N}} \varphi(xL) + \sum_{x=1}^{N} \varphi(p_{k+1})\,\varphi(xL) \\ &= \sum_{x=1}^{\left\lfloor \frac{N}{p_{k+1}} \right\rfloor} \varphi(x L p_{k+1}) + \sum_{x=1}^{N} \varphi(p_{k+1})\,\varphi(xL) \\ &= \sum_{x=1}^{\left\lfloor \frac{N}{p_{k+1}} \right\rfloor} \varphi(xL') + \varphi(p_{k+1}) \sum_{x=1}^{N} \varphi(xL) \\ &= \sum_{x=1}^{\left\lfloor \frac{N}{p_{k+1}^2} \right\rfloor} \varphi(xL') + \varphi(p_{k+1}) \sum_{x=1}^{\left\lfloor \frac{N}{p_{k+1}} \right\rfloor} \varphi(xL) + \varphi(p_{k+1}) \sum_{x=1}^{N} \varphi(xL) = \cdots \end{aligned}
    x=1∑N​φ(xL′)​=pk+1​∣xx≤N​∑​φ(xL
    1jd⌋)\begin{aligned} \sum_{x=1}^{N} \varphi(xL') &= \varphi(p_{k+1}) \sum_{j \ge 0} \sum_{x=1}^{\left\lfloor N / p_{k+1}^j \right\rfloor} \varphi(xL) \\ &= \varphi(p_{k+1})\,\varphi(L) \sum_{j \ge 0} \sum_{\mathbb{P}(d) \subseteq \mathbb{P}(L)} \Phi\left(\left\lfloor \frac{N}{p_{k+1}^j d} \right\rfloor\right) \end{aligned}
    x=1∑N​φ(xL′)​=φ(pk+1​)j≥0∑​x=1∑⌊N/pk+1j​⌋​φ(xL)=φ(pk+1​)φ(L)j≥0∑​P(d)⊆P(L​
    d′=pk+1jdd' = p_{k+1}^j d
    d′=pk+1j​d
    P(d′)⊆P(L′)\mathbb{P}(d') \subseteq \mathbb{P}(L')P(d′)⊆P(L′)
    k+1k+1k+1
    (
    ⌊dN​⌋
    )
    φ(L)\varphi(L)φ(L)
  • ddd는 LLL의 소인수를 폴라드 로 알고리즘으로 구한 뒤, 소인수마다 지수를 늘려 가는 백트래킹이나 큐로 만들면 됩니다.
  • LLL이 서로 다른 소수 C:=15C := 15C:=15개의 곱으로 이루어진 합성수 2×3×5×⋯×47=614 889 782 588 491 4102 \times 3 \times 5 \times \cdots \times 47 = 614\,889\,782\,588\,491\,4102×3×5×⋯×47=614889782588491410일 때 d≤Nd \le Nd≤N이면서 P(d)⊆P(L)\mathbb{P}(d) \subseteq \mathbb{P}(L)P(d)⊆P(L)인 ddd가 D:=968 531D := 968\,531D:=968531개로 가장 많습니다. 이 정도면 시간 안에 모두 만들 수 있습니다.
  • Φ\PhiΦ는 Mertens trick(xudyh's sieve)으로 구합니다. Φ(N)\Phi(N)Φ(N)을 구하는 과정에서 모든 양의 정수 eee에 대한 Φ(⌊N/e⌋)\Phi(\lfloor N/e \rfloor)Φ(⌊N/e⌋)가 함께 구해지므로, 각 ddd에 대한 값은 꺼내 쓰기만 하면 됩니다.
  • 총 시간복잡도는 O(L1/4+N2/3+CD)\mathcal{O}(L^{1/4} + N^{2/3} + CD)O(L1/4+N2/3+CD)입니다.
  • p∤x
    x≤N
    ​
    ∑
    ​
    (
    p
    −
    1
    )
    φ
    (
    x
    )
    ∣
    x
    x≤N
    ​
    ∑
    ​
    (
    p
    −
    1
    )
    φ
    (
    x
    )
    +
    p∤xx≤N​∑​
    (
    p
    −
    1
    )
    φ
    (
    x
    )
    N
    ​
    (
    p
    −
    1
    )
    φ
    (
    x
    )
    x=1∑N​
    (
    p
    −
    1
    )
    φ
    (
    x
    )
    φ
    (
    p
    )
    x=1∑N​
    φ
    (
    x
    )
    φ
    (
    x
    p
    )
    +
    φ
    (
    p
    )
    x=1∑⌊pN​⌋​
    φ
    (
    x
    )
    +
    φ
    (
    p
    )
    x=1∑N​
    φ
    (
    x
    )
    =
    ⋯
    ′
    )
    +
    pk+1​∤xx≤N​∑​
    φ
    (
    x
    L′
    )
    =pk+1​∣xx≤N​∑​pk+1​φ(xL)+pk+1​∤xx≤N​∑​(pk+1​−1)φ(xL)
    =pk+1​∣xx≤N​∑​φ(xL)+pk+1​∣xx≤N​∑​(pk+1​−1)φ(xL)+pk+1​∤xx≤N​∑​(pk+1​−1)φ(xL)
    =pk+1​∣xx≤N​∑​φ(xL)+x=1∑N​φ(pk+1​)φ(xL)
    =x=1∑⌊pk+1​N​⌋​φ(xLpk+1​)+x=1∑N​φ(pk+1​)φ(xL)
    =x=1∑⌊pk+1​N​⌋​φ(xL′)+φ(pk+1​)x=1∑N​φ(xL)
    =x=1∑⌊pk+12​N​⌋​φ(xL′)+φ(pk+1​)x=1∑⌊pk+1​N​⌋​φ(xL)+φ(pk+1​)x=1∑N​φ(xL)=⋯
    ​
    )
    ∑
    ​
    Φ
    (⌊pk+1j​dN​⌋)