(1)用连续整除检测法求两个正整数m和n的最大公约数
(2)用欧几里德算法求两个正整数m和n的最大公约数
(3)用相减法求两个正整数m和n的最大公约数
#include<iostream>
using namespace std;
class calculate
{
private:
int m,n,temp,max;
public:
void fun1();
void fun2();
void fun3();
};
void calculate::fun1()//一个个除的蛮力法
{
int i=0;
cout<<"please enter two numbers:"<<endl;
cin>>m>>n;
if(m>n)
{
temp=m;
m=n;
n=temp;
}
for(i=m;i>0;i--)//如果从i=1开始比较就算得到了公因数也不知道是不是最大公因数,则需要依然继续比较直到i=m,然后才能保证更新到了最大的公因数,而i从m开始则遇到的第一个公因数便是最大公因数,则避免了不必要的比较。
{
if(m%i==0 && n%i==0)
break;
}
cout<<"最大公因数是: "<<i<<endl;
}
void calculate::fun2()//欧几里得辗转相除法
{
int max=0,x;
cout<<"please enter 2 numbers:"<<endl;
cin>>m>>n;
if(m>n)
{
temp=m;
m=n;
n=temp;
}
x=n%m;
if(x==0)
max=n;
else
while(x!=0)
{
n=m;
m=x;
x=n%m;
max=m;
}
cout<<"最大公因数是:"<<max<<endl;
}
void calculate::fun3()//辗转相减法
{
cout<<"please enter 2 numbers:"<<endl;
cin>>m>>n;
while(m!=n)
{
if(m<n)
n=n-m;
else
m=m-n;
}
cout<<"最大公因数是:"<<m<<endl;
}
int main()
{
calculate a;
a.fun3();//这里以第三种方法为例子输出
return 0;
}
输入输出如下图所示: