一、最大公因数:
上过小学的都知道,最大公因数是什么,指整数中数列中所有数字的最大公有因数。
二、求解:
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 <iostream>
#include <algorithm>
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 <iostream>
#include <algorithm>
using namespace std;
int main() {
int a, b;
...
cout << __gcd(a, b);
}