1. 題目
2. 思路
如何求N個數的最大公因數呢?(N > 1)
在初等數學裏,有這麼幾個定理
1、任何一個整數,都可以分解爲素數因子的乘積
比如
24 = 2* 2* 2 * 3;
26 = 2 * 13;
分解時應該從2開始分解起
2、若干個數的最大公因數是共同素數因子的乘積
比如 求 48 60 72 的最大公因數
48 = 2*2*2*2*3
60 = 2*2*3*5
72 = 2*2*2*3*3
共同的素數因子爲 2 * 2 * 3 = 12 所以他們的最大公因數就是12
3. 代碼
class Solution {
public:
bool hasGroupsSizeX(vector<int>& deck) {
unordered_map<int, int> temp;
// 計數
for(int it : deck){
temp[it]++ ;
}
// 計算最大公因數
int gc = temp[deck[0]];
for(auto it : temp){
gc = gcd(gc, it.second);
}
// 題目要求
return gc >= 2;
}
};