数列$a_{1..n}$
$lcm(a,b)=\frac{a*b}{gcd(a,b)}$
枚举$gcd(a,b)<=\sqrt n$,构成$gcd$,$a_i/gcd=b_i$,变成了求$b_i$中乘积最大互质。
将b_i从大到小排序,设置一个栈$s$,遍历$b_i$,设当前遍历为$x$?
- $ans=max(ans,xk(栈内与x互质的最大数)g)$
- 贪心的发现比$k$小栈内的数都失去了机会。
如何找到$k$,可以通过找到栈内有多少与$k$互质的数。
一个数的因数个数$\log n$
复杂度$O(sqrt(n)nlog(n))$ ,实现:$600ms\leq 1000ms$
代码
1 |
|