题目描述 给一个长度为n(1<=n<=100000)的正整数列,分成尽量多的非空段,使得每一段的最大公约数相等.一个数的最大公约数是它本身. 解题思路 要求每一段子列的gcd相等,不妨设为d,可以知道d是所有数的最大公约数,即d=(a[1],a[2],--,a[n]).于是我们先求出d,然后从前往后扫描,记st=1,移动ed,计算d1=(a[st],--,s[ed]),直到d1==d,得到的区间[st,ed]就是一个符合题目要求的子列:记st=ed+1,重复上述操作,直至数列扫完.算法时间复杂…