一、最大公因数:
上过小学的都知道,最大公因数是什么,指整数中数列中所有数字的最大公有因数。
二、求解:
1.暴力枚举:
QWQ,这应该是最简单的办法了,从枚举到2,如果有符合题意的,直接break输出。没有就输出1,时间复杂度
代码:
python
a = []
...
a.sort()
mina = a[0]
b = false
for i in range(a[0], 2, -1):
for j in a:
if j % i != 0:
b = true
break
if not b:
print(i)
break
b = false
print(1)
C++
#include#include using namespace std; int main() { int a[MAXSIZE]; ... bool b = false; int max = a[0]; for (int i = max; i >= 2; i--) { for (int j = 0; j < MAXSIZE; j++) { if (a[j] % i != 0) { b = true; break; } } if (!b) { cout << i; break; } } cout << 1; }
2.欧几里得算法(辗转相除法)
欧几里得算法的意思是:
这样时间复杂度就为
代码:
python
def gcd(a, b):
if b == 0:
return a
return gcd(b, a % b)
C++
int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}
C++的algorithm库中,有__gcd(int a, int b)函数,可以直接使用,例如:
#include#include using namespace std; int main() { int a, b; ... cout << __gcd(a, b); }



