CSES1081:Common Divisors

传送门

题意:找到两个 \(gcd\) 最大的数。\(n\le 2e5,a_i\le 1e6\)

一种方法是枚举 \(i:1\sim n\)\(O(\sqrt a_i)\)\(a_i\) 因数的出现次数加一。

然后 \(i:1000000\sim 1\),如果 \(cnt[i]>1\),输出 \(i\) 结束。

复杂度 \(O(n\sqrt V)\)\(2e8\),可惜 CSES 的机子跑不过。

枚举倍数。

\(cnt[a[i]]\) 加一。枚举 \(i:1000000\sim 1\),枚举 \(j\)\(i\) 的倍数,统计 \(i\) 的所有倍数出现次数 \(tmp\)。若 \(tmp>1\) 表示 \(i\) 可行。

复杂度?最差 \(O(n+\sum_{i=1}^{V}\dfrac{V}{i})=O(n+V\log V)\)\(2e7\) 可以接受。

对于每个数,枚举因数,是 \(O(n\sqrt V)\) 的;枚举值域内每个数的倍数,是 \(O(V\log V)\) 的。

posted @ 2024-03-04 20:51  FLY_lai  阅读(23)  评论(0编辑  收藏  举报