--- title: "Codeforces Round 766 (Div. 2) D(枚舉+數論)" tags: 題解, 枚舉, 數論 --- https://codeforces.com/contest/1627/problem/D #### 題意 給一數列,每次能從中挑兩個數後將它們的 GCD 加入數列中,問最多能加入新數字多少次。 #### 思路 首先,能被加入的數字最大就是原數列的最大值,我們可以遍歷所有可能的數,檢查數列中是否有兩數的 GCD 等於當前的數,如果有則代表這個數可以被加入。 檢查時,我們只需要針對該數的倍數即可。 #### Code ```python=1 def solve(): N = int(input()) A = list(map(int, input().split())) MAXN = max(A) seen = [False for _ in range(MAXN + 1)] for a in A: seen[a] = True ans = 0 for v in range(1, MAXN + 1): if seen[v]: continue vs = [vv for vv in range(2 * v, MAXN + 1, v) if seen[vv]] if len(vs) < 2: continue g = vs[0] for vv in vs[1:]: g = gcd(g, vv) if g == v: ans += 1 seen[v] = True break print(ans) if __name__ == "__main__": solve() ```