1.GCD算法
GCD(getGreatestCommonDivisor)获得最大公约数的方法。
下面给出c++的GCD算法迭代求法
#include<iostream>
using namespace std;
typedef unsigned uint;
uint GCD(uint a, uint b) {
return (a == 0) ? b : (b == 0 ? a : (a > b ? GCD(a % b, b) : GCD(b % a, a)));
}
int main() {
cout << GCD(12,5) << endl;
return 0;
}
2.EGCD算法:输入:a、b两个整数,输出:r、s、d三个整数,满足ar + bs =d。
#include<iostream>
using namespace std;
int main()
{
void EGCD(int a, int b);
int a, b;
cin >> a >> b;
EGCD(a, b);
return 0;
}
void EGCD(int a, int b)
{
int r0 = 1, r1 = 0, s0 = 0, s1 = 1;
while (b)
{
int q = a / b;
int temp = a;
a = b; b = temp % b;
temp = r0;
r0 = r1; r1 = temp - q * r1;
temp = s0;
s0 = s1; s1 = temp - q * s1;
}
cout << "gcd=" << a << endl;
cout << "r=" << r0 << endl;
cout << "s=" << s0 << endl;
}
3.实现一种批处理版本的GCD算法,即,给定一个整数数组,输出其中所有整数的最大公因子。
输入:一个整数数组a;输出:一个整数d,是a数组中所有整数的最大公因子。
#include<iostream>
#include<string>
using namespace std;
int GCD(int a, int b) {
return (a == 0) ? b : (b == 0 ? a : (a > b ? GCD(a % b, b) : GCD(b % a, a)));
}
void main()
{
int i, k, l, a, X[20];
cout << "请输入一组整数:(以‘-1’结尾)";
for (a = 0; a < 20; a++)
{
cin >> X[a];
if (X[a] == -1)
break;
}
k = GCD(X[0], X[1]);
for (i = 2; i < a; i++)
{
k = GCD(k, X[i]);
}
cout << "这组数的最大公因数为:" << k << endl;
}