貝殼2021演算法,數列刪除數字變成最大公約數為1

2021-10-09 02:52:56 字數 1179 閱讀 4650

題目:我們定義任意乙個序列的最大公約數為最大的能整除序列中所有數的數,例如[2,2,4]的最大公約數為2,[1,2,4]的最大公約數為1,現在想對於乙個長度為n的序列,如果最多能刪除n-1個數,請問他需要至少刪除多少個數可以讓序列的最大公約數為1,或者不可能,不可能輸出-1。

輸入:2#資料組數

3#每組資料中序列的長度

2 2 4#序列內的數

21 2

輸出:-1

0思路:將數列的第乙個數作為數列其他數的除數,只要能整除就把後面的數都刪了,再到數列剩下數的第二個作為數列其他數的除數,整除的再刪,只到遍歷到最後乙個數。如果剩下多個數,刪的數的個數就是最後結果,如果只能乙個數則不能實現輸出-1。同時只要1在數列中,一定不用處理最大公約數就是1。

**:

n =

int(

input()

)for i2 in

range

(n):

n2 =

int(

input()

) list1 =

list

(map

(int

,input()

.split())

)if1in list1:

print(0

)else

: list2 =

sorted

(list1)

i =0 list3 =

while i<

len(list2)-1

:for j in

reversed

(range

(len

(list2)))

: a = list2[i]

if list2[j]

%a==0:

) list2.remove(list2[j]

) list2.insert(i,a)

i = i +

1 list3.remove(a)

iflen

(list2)

<=1:

print(-

1)else

:print

(len

(list3)

)

貪心演算法 數列極差

佳佳的老師在黑板上寫了乙個由 n 個正整數組成的數列,要求佳佳進行如下操作 每次擦去其中的兩個數 a 和 b,然後在數列中加入乙個數 a b 1,如此下去直至黑板上剩下乙個數為止,在所有按這種操作方式最後得到的數中,最大的為 max 最小的為 min 則該數列的極差定義為 m max min 由於佳...

數學中的演算法 數,數列

數列問題真的很頭疼,需要不少數學基礎和概念,有些複雜不好記的早丟了,只能總結些定義一看即懂的數列了 常見概念 質數 素數 合數約數 質因數階乘 排列公式 組合公式 二分求冪 卡特蘭數 唯一因式分解定理 約數個數定理 中國餘數定理 不太明白 斐波那契數列 費馬小定理 哥德 猜想 等差數列 等比數列 常...

初級演算法 陣列 刪除排序陣列中的重複項

給你乙個有序陣列 nums 請你 原地 刪除重複出現的元素,使每個元素 只出現一次 返回刪除後陣列的新長度。不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 o 1 額外空間的條件下完成。說明 為什麼返回數值是整數,但輸出的答案是陣列呢?請注意,輸入陣列是以 引用 方式傳遞的,這意味著...