CF_动态求gcd、动态维护质因数分解

题目

给定你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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值