最大公约数与最小公倍数

最大公约数 
几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。如果数a能被数b整除,a就叫做b的 倍数,b就叫做a的 约数。约数和倍数都表示一个 整数与另一个整数的关系,不能单独存在。

最小公倍数

两个或多个整数公有的倍数叫做它们的公倍数。两个或多个整数的公倍数里最小的那一个叫做它们的最小公倍数

1.穷举法

流程图如下:

实现代码如下:

#include<stdio.h>
void swap(int *a,int *b);  //加和法函数
int main()
{
    int num1,num2,*m1,*m2;    //定义整数
    int i;
    int m,flag=1; 
    while(flag)
    {
        printf("请输入两个数(以空格符为界):");
        scanf("%d %d",&num1,&num2);
        m1=&num1;m2=&num2;
        if(num1<num2)   swap(m1,m2);
        for(i=num2;i>=1;i--)//穷举法 
        {
            if(num1%i==0&&num2%i==0) //将两个数a,b中较小的值赋给i,将a除以i,b也除以i,若两者的余数同时为0时,此时的i就是两者的最大公约数。
            break;
        }
        printf("最大公约数为:%d\n",i);
        printf("最小公倍数为:%d\n",num1*num2/i);
        printf("继续请输入1,退出请按0:");
        scanf("%d",&m);
        if(m==0)  flag=0;   
    }
 } 
void swap(int *a,int *b)//加和法 
{
    *a=*a+*b;
    *b=*a-*b;
    *a=*a-*b;
}

2.相除法

流程图如下:

实现代码如下:

#include<stdio.h>

void main()   /*  辗转相除法求最大公约数 */

{

   int m, n, a, b, t, c;

   printf("请输入两个有效的正整数:\n");

   scanf("%d%d", &a, &b);

   m=a;   

   n=b;

   while(b!=0)  /* 余数不为0,继续相除,直到余数为0 */

   { c=a%b; a=b;  b=c;}

   printf("最大公约数为:%d\n", a);

   printf("最小公倍数为:%d\n", m*n/a);

}

3.相减法

流程图如下:

实现代码如下:

#include<iostream>
using namespace std;

int main()
{
	int a,b,g,l;
	int max(int a,int b);//max为最大公约数
	int min(int a,int b);//min即为最小公倍数
	cout<<"请输入两个有效的数字:"<<endl;
	cin>>a>>b;
	g=max(a,b);
	l=min(a,b);
	cout<<"所求的最大公约数为"<<g<<endl;
	cout<<"所求的最小公倍数为"<<l<<endl;
	return 0;
}
int max(int a,int b)//用更相减损法求最大公约数
{
	int c;
	while(a!=b) //a, b不相等,大数减小数,直到相等为止
	{
		if(a>b)
		{
			c=a-b;
			a=c;
		}
		else
		{
			c=b-a;
			b=c;
		}
	}
	return a;
}
int min(int a,int b)//最小公倍数等于两数的积除以两数的最大公约数
{
	int g,l;
	g=max(a,b);
	l=a*b/g;
	return l;
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值