题目链接
题目大意
给出n个数,先两两求出其最小公倍数,构成一个集合m,再求出m里面所有数的最大公因数
思路
思路一
用第二个例子来说:
由唯一分解定理可知,N可以看成多个质数的乘积。对每个数质因子分解,用数组保存每个质因子出现的幂次
先求最小公倍数的话,新生成的数是取每个质数的最大次幂,以此类推,设新生成的数构成一个集合m
再对所有的数求最大公约数,就是求新的集合m中,所有数的共同的因子,就是最小的幂数
思路二
对于 a1 与剩下所有的数组成的最小公倍数,可以推导出:
g
c
d
(
l
c
m
(
a
1
,
a
2
)
,
l
c
m
(
a
1
,
a
3
)
.
.
.
.
l
c
m
(
a
1
,
a
n
)
)
=
l
c
m
(
a
1
,
g
c
d
(
a
2
,
a
3
,
.
.
.
,
a
n
)
)
gcd(lcm(a1,a2),lcm(a1,a3)....lcm(a1,an)) = lcm(a1,gcd(a2,a3,...,an))
gcd(lcm(a1,a2),lcm(a1,a3)....lcm(a1,an))=lcm(a1,gcd(a2,a3,...,an))。
对于每个数都是如此,所以我们求出每个序列后缀的 gcd 就可以了
可以用集合的方法看:lcm是求并集,gcd是求交集。a1先对a2,a3求并集,最后再求交集 等价于 先求a2,a3的交集,再求其与a1的并集
代码
(先放着吧,555,难以理解)