DOJ logoDOJ
题目
最近添加的题目收藏的题目
分类DLC比赛小组团队讨论区
排名
解题数量排行榜连续解题排名DOJ Power 排行榜
评测状态
征题登录注册
DOJ logoDOJ

支持 OI 子任务计分、Elo 等级分和 Discord 认证的社区在线评测系统。

题目
题目列表分类
社区
比赛排名讨论区公告举办外部比赛指南
账号
登录注册评测状态
政策
服务条款DLC 使用规则隐私政策API 文档语言运行环境比赛排名奖励评级与表现
© 2026 DOJ
保留所有权利
题解

Déjà vu

返回题目

题解

한 부분수열의 f(b)f(b)f(b)에는 모든 원소에서 지수가 같은 소수 거듭제곱만 남는다. 예를 들어 12=22⋅312=2^2\cdot312=22⋅3, 20=22⋅520=2^2\cdot520=22⋅5에서는 222^222만 남겨 f((12,20))=4f((12,20))=4f((12,20))=4를 얻는다.

d∣xd\mid xd∣x이고 gcd⁡(d,x/d)=1\gcd(d,x/d)=1gcd(d,x/d)=1이면 d∥xd\parallel xd∥x라고 쓰자. 즉, 를 소인수분해한 뒤 각 소수 거듭제곱을 통째로 선택하거나 버려서 얻는 약수이다. 라 하고, 각 에 대해 를 구한다. 각 값의 빈도를 세고, 소수 거듭제곱들의 부분집합 곱을 열거하면 된다.

EdE_dEd​를 f(b)=df(b)=df(b)=d인 부분수열의 개수라고 하자. 먼저 Ed=2cd−1E_d=2^{c_d}-1E로 초기화한다. 이후 순서로, 의 모든 약수 , 에 대해 에서 를 뺀다. 정답은

∑d=1AdEd\sum_{d=1}^{A}dE_dd=1∑A​dEd​

이며, 모든 계산은 998 244 353998\,244\,353998244353을 법으로 한다.

최소 소인수와 222의 거듭제곱을 미리 계산하면 한 케이스의 시간 복잡도는 O(N+Alog⁡A)O(N+A\log A)O(N+AlogA), 공간 복잡도는 O(N+A)O(N+A)O(N+A)이다.

증명

소수 ppp의 지수가 eie_iei​인 원소에 ppp를 고르는 연산을 rrr번 적용하면 그 지수는 max⁡(ei이 된다. 지수가 모두 같으면 그대로 남기는 것이 최선이다. 서로 다르면 같은 값이 되기 위해 모두 이 되어야 한다. 따라서 에는 모든 원소에서 지수가 같은 양의 소수 거듭제곱만 남는다.

xx
x
A=max⁡iaiA=\max_i a_iA=maxi​ai​
ddd
cd=#{i:d∥ai}c_d=\#\{i:d\parallel a_i\}cd​=#{i:d∥ai​}
d
​
=
2cd​−
1
x=A,A−1,…,1x=A,A-1,\ldots,1x=A,A−1,…,1
xxx
d∥xd\parallel xd∥x
d<xd<xd<x
EdE_dEd​
ExE_xEx​
−r,0)\max(e_i-r,0)
max(ei​−r,0)
000
f(b)f(b)f(b)

이에 따라 d∥f(b)d\parallel f(b)d∥f(b)일 필요충분조건은 선택한 모든 원소 aia_iai​에서 d∥aid\parallel a_id∥ai​인 것이다. 그러므로

2cd−1=∑x: d∥xEx.2^{c_d}-1=\sum_{x:\,d\parallel x}E_x.2cd​−1=x:d∥x∑​Ex​.

d∥xd\parallel xd∥x이고 d≠xd\ne xd=x이면 d<xd<xd<x이다. 따라서 큰 xxx부터 처리하면 ExE_xEx​가 확정된 상태에서 그 기여를 작은 약수들에서 뺄 수 있다.

열거하는 약수는 일반적인 약수의 일부이므로, 전체 열거 횟수는 ∑d=1A⌊A/d⌋=O(Alog⁡A)\sum_{d=1}^{A}\lfloor A/d\rfloor=O(A\log A)∑d=1A​⌊A/d⌋=O(AlogA) 이하이다.