#1、给出Bezout定理的完整证明。
#2、实现GCD算法的迭代版本。
#include <iostream>
using namespace std;
int gcd(int a,int b)
{
int temp=0;
while(b!=0)
{
temp = a;
a = b;
b = temp % a;
}
return a;
}
int main()
{
int gcd(int a,int b);
int a=18;
int b=9;
cout<<"a=18 b=9"<<endl;
cout<<gcd(a,b);
return 0;
}
#3、实现EGCD算法。输入:a、b两个整数,输出:r、s、d三个整数,满足ar + bs =d。
#include <iostream>
using namespace std;
int egcd(int a,int b,int *result)
{
if (a<b)
{
int temp = a;
a = b;
b = temp;
}
int temp_a, temp_b, temp_ab;
int n;
int r0=1, r1=0, s0=0, s1=1;
while (b != 0)
{
n = a/b;
a %= b;
temp_ab = a;
a = b;
b = temp_ab;
r0 -= n * r1;
s0 -= n * s1;
temp_a = r0;
temp_b = s0;
r0 = r1;
s0 = s1;
r1 = temp_a;
s1 = temp_b;
}
result[0] = r0;
result[1] = s0;
result[2] = a;
}
int main()
{
int egcd(int a,int b,int *result);
int *result;
int arr[3]={};
result=arr;
int a, b;
cin>>a;
cin>>b;
egcd(a,b,result);
cout<<"系数r:"<<result[0]<<endl;
cout<<"系数s:"<<result[1]<<endl;
cout<<"最大公因子d:" <<result[2]<<endl;
return 0;
}
#4、实现一种批处理版本的GCD算法,即,给定一个整数数组,输出其中所有整数的最大公因子。输入:一个整数数组a;输出:一个整数d,是a数组中所有整数的最大公因子。
#include <iostream>
using namespace std;
int gcd(int arr[],int n)
{
int d;
if (arr[0] < arr[1])
{
int tmp = arr[0];
arr[0] = arr[1];
arr[1] = tmp;
}
while (arr[1] != 0)
{
arr[0] = arr[0] % arr[1];
int tmp = arr[0];
arr[0] = arr[1];
arr[1] = tmp;
}
d = arr[0];
for (int i = 2; i < n; i++)
{
if (d < arr[i])
{
int tmp = arr[i];
arr[i] = d;
d = tmp;
}
while (arr[i] != 0)
{
d = d % arr[i];
int tmp = d;
d = arr[i];
arr[i] = tmp;
}
}
return d;
}
int main()
{
int gcd(int arr[],int n);
int n;
cout <<"请输入数组的元素个数:"<< endl;
cin>>n;
int *p = new int[n];
for (int i = 0; i < n; i++)
{
cin>>p[i];
}
cout <<"最大公因数为:"<<gcd(p,n)<<endl;
return 0;
}