1、结合律、交换律:
gcd(a1,a2,...,an) = gcd(a1,gcd(a2,..,an))
对于一个区间的gcd,就是每个数的gcd。。
2、单调性:
以4开头往后区间的gcd可能为: 4 4 2 2 2 2 1 1 1 1 1 1 而不可能为: 2 2 4 4 1 1 1 4
由于它在每个独立区间都是唯一的,多次重复计算结果是一样的,所以可以像求最值一样求gcd(线段树,rmq)
因为gcd相等的区间是连续的
而如果要查询gcd=x的区间个数,其实可以用枚举左端点二分。
如果要查的x很多。
就直接加个map 利用gcd区间的单调性预处理直接记录
就是利用gcd的性质。
两个整数a,b 他们的最大公约数为n 最小公倍数为m 则有
a,b都能分解为有限个素数的积 12 = 2^2 * 3^1 * 5^0 , 30 = 2^1 * 3^1 * 5^1
n为a,b所有素因子取较小指数的积 n = 2^1 * 3^1 * 5^0 = 6
m为a,b所有素因子取较大指数的积 m = 2^2 * 3^1 * 5^1 = 60
n中只含a,b的全部公共素因子 n = 2^1 * 3^1
m中含有a,b的所有素因子 m = 2^2 * 3^1 * 5^1
m/n中只含a,b的全部指数不等素因子 m/n = 10 = 2^1 * 5^1
m%n == 0 60 % 6 == 0
m*n == a*b 60 * 6 == 12 * 30