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)\) 的。