题意
给定一个数 n n ,问在小于等于的数中,有多少数对(a,b)满足 lcm(a,b)=n l c m ( a , b ) = n ,其中 a<b a < b
思路
lcm=n
l
c
m
=
n
的数对中的两个数一定是n的因子
我们从因子的角度来看LCM:
对n进行素因子分解
n=pa11pa22pa33...pakk
n
=
p
1
a
1
p
2
a
2
p
3
a
3
.
.
.
p
k
a
k
那么它的因子
mi
m
i
一定也可以表示为
mi=pbi11pbi22pbi33...pbikk,0=<bik<=aik
m
i
=
p
1
b
i
1
p
2
b
i
2
p
3
b
i
3
.
.
.
p
k
b
i
k
,
0
=<
b
i
k
<=
a
i
k
lcm(mi,mj)=pmax(bi1,bj1)1pmax(bi2,bj2)2...pmax(bik,bjk)k
l
c
m
(
m
i
,
m
j
)
=
p
1
m
a
x
(
b
i
1
,
b
j
1
)
p
2
m
a
x
(
b
i
2
,
b
j
2
)
.
.
.
p
k
m
a
x
(
b
i
k
,
b
j
k
)
lcm(mi,mj)=n
l
c
m
(
m
i
,
m
j
)
=
n
max(bi1,bj1)=a1,...,max(bik,bjk)=ak
m
a
x
(
b
i
1
,
b
j
1
)
=
a
1
,
.
.
.
,
m
a
x
(
b
i
k
,
b
j
k
)
=
a
k
如果
bi1
b
i
1
取
a1
a
1
,那么
bj1
b
j
1
可以取
0−a1
0
−
a
1
,共有
a1+1
a
1
+
1
种取法
如果
bi1
b
i
1
取小于
a1
a
1
的数,那么
bj1
b
j
1
只能取
a1
a
1
,共有
a1
a
1
种取法,所以对于第一个素因子总共有
2a1+1
2
a
1
+
1
种取法
所以对于所有的素因子来说总共有
∑(2ak+1)
∑
(
2
a
k
+
1
)
种取法
由于本题目中要求数对是有序的,所以最终的结果要加一除以二