您的位置:首页 > 其它

辗转相除法

2016-02-11 20:45 295 查看
利用辗转相除法求 两数的最大公因数 或 最小公倍数

例如 求6497和3869的最大公因数和最小公倍数

6497÷3869=1……2628

3869÷2628=1……1241

2628÷1241=1……146

1241÷146=8……73

146÷73=2……0

则 最大公因数为 73

最小公倍数为 6497×3869÷73=344341

如下 代码

#include<iostream>
using namespace std;
int s[500];
__int64 x,y;
int g(int a,int b)
{
int i,t;
y=a*b;
if(a<b){
t=a;
a=b;
b=t;
}
while(b){
t=b;
b=a%b;
a=t;
}
return y/a;     // a为两数的最大公因数,y/a为两数的最小公倍数
}
void f(int s[],int n)
{
x=s[0];
for(int i=1;i<n;i++){
x=g(s[i],x);
}
cout<<x<<endl;
}
int main()
{
int n;
cin>>n;
while(n--){
int a;
cin>>a;
for(int i=0;i<a;i++)cin>>s[i];   //求数组s中所有数的最大公因数最小公倍数
f(s,a);
}
//system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: