给定你n=2e5个数[1, 2e5],有q=2e5次的操作{
ind, mul} mul=[1, 2e5]
表示: 执行A[ind] *= mul后, 这n个数的gcd为多少
求每执行一次操作后,全局的gcd为多少
' 由于,执行 *= mul后,会非常的大; 请对gcd %= 1e9+7 '
[4, 6, 9] -> 初始的gcd为 1
{
1, 3} -> 变为[12, 6, 9], 其gcd为 3
{
3, 2} -> 变为[12, 6, 18], 其gcd为 6
1, 你很容易的以为,gcd一定不会 > 2e5
'这是错的 !!!! 一旦你这么认为,就完全走错方向了'
当n<2e5时,确实gcd是<=2e5的
但假如说n==2,最极限时 gcd是非常非常大的!!! 肯定是要涉及到取模的!!
' 不要认为, 最极限的数据 一定是每个变量 取Max,这是错的!!! 比如这个题,当n取Min时 是最极限的数据'
2, 正确的思路是: 我们可以发现,因为mul >= 1
所以,他的gcd 一定是递增的!!!
这是肯定的,因为每次的操作 该元素,一定是变大 不会变小
而且是'成倍的'变大,即A *= x 相乘, 不会是A += x的变大
这个性质非常非常的重要!!! 每次执行操作后的gcd,一定是递增的!!
最开始: a[1] a[2] a[3] ... a[n]
1,我们设置 map<int,int> A[n],表示 每个元素的'质因数分解'
因为很重要的一点: 对第一个[2e5]的数X,执行2e5次的[*= 2e5]
那么这个X数,最终,虽然他确实是很大(2e5 ^ 2e5)
但,他的质因数分解: p1^a1 * p2^a2 * ..
其中, pi 最大才只有2e5!!
ai 最大有(20
CF_动态求gcd、动态维护质因数分解
最新推荐文章于 2022-04-03 20:28:46 发布