求两个数的最大公约数思路有三种:第一种,采用穷举法按从小到大(初值为1,最大值为两个整数当中较小的数)的顺序将所有满足条件的公约数列出,输出其中最大的一个;第二种,按照从大(两个整数中较小的数)到小(到最小的整数1)的顺序求出第一个能同时整除两个整数的自然数,即为所求。第三种则是使用辗转相除法求解。辗转相除法具体见以下链接
求两数的最小公倍数时要运用到两数的最大公约数和最小公倍数的关系即
两数的最小公倍数=两数之积 / 两数的最大公倍数
第一种穷举法略
按照想法二求解
#include<iostream>
using namespace std;
int main()
{
int a,b,temp,i,max;
max=0;
cin>>a>>b;
if(a < b) //比较大小,使得m中存储大数,n中存储小数*
{
temp = a;
a = b;
a = temp;
}
for(i=b ;i>0 ;i--) //按照从大到小的顺序寻找满足条件的自然数
if(a%i==0 && b%i==0)
{//输出满足条件的自然数并结束循环,由于判定时是从大到小顺序判定,即满足条件的第一个数即两数的最大公约数
cout<<"两数的最大公约数为: "<<i;
//最小公倍数按其与最大总约束的关系计算
break;
}
return 0;
}
辗转相除法求两数的最最大公约数,最小公倍数
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int min(int n1,int n2)
{//使用辗转相除法求两数的最小公倍数
int t,y;
if(n1<n2)
{
t=n1;
n1=n2;
n2=t;
}
while(true)
{
y=n1%n2;
n1=n2;
n2=y;
if(y==0)
{
break;
}
}
return n1;
}
int main()
{
int a,b,c;
cin>>a>>b;
c=min(a,b);
d=(a*b)/c;//两个数的最小公倍数等于两数之积除以两数的最小公倍数
cout<<"最大公约数为:"<<c;
cout<<"最小公倍数为:"<<d;
return 0;
}