算法之最大公约和最小公倍数

求两个数的最大公约数思路有三种:第一种,采用穷举法按从小到大(初值为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;
 } 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值