DOJ logoDOJ
問題
最近追加された問題保存した問題Workbooks
カテゴリDLCコンテストグループチーム掲示板
ランキング
正解数ランキングストリークランキングDOJ Powerランキング
提出状況
問題募集ログイン新規登録
DOJ logoDOJ

OI形式のサブタスク採点、Eloレーティング、Discord認証を備えたオンラインジャッジです。

問題
問題一覧カテゴリ
コミュニティ
コンテストランキング掲示板お知らせ外部のコンテストを開催するガイド
アカウント
ログイン新規登録ジャッジ状態
ポリシー
利用規約DLCの利用規則プライバシーAPI 文書言語ランタイムコンテストの順位報酬レーティングとパフォーマンス
© 2026 DOJ
All rights reserved
解説

루미의 생일파티장 꾸미기 (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​⌋)