C语言基础:输入两个正整数求这两个正整数的最小公倍数和最大公约数。

一、什么是最大公约数什么是最小公倍数

最小公倍数的基本概念:

如果一个数既是a又是b的倍数,那么我们就把这个数叫着a和b的公倍数,如果这个数在a b的所有公倍数里为最小,那这个数就是最小公倍数。

最大公约数的基本概念
能够整除一个整数的整数称为其的约数(如5是10约数);能够被一个整数整除的整数称为其的倍数(如10是5的倍数);如果一个数既是数A的约数,又是数B的约数,称为A,B的公约数,A,B的公约数中最大的一个(可以包括AB自身)称为AB的最大公约数。

方法一

 直接遍历寻找最大公约数

方法二:

辗转相除法求最大公约数,辗转相除法的基本做法:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数

例如:输入两个数A,B,若A大于B,设二者余数为M则有,

M=A%B;

A=B;

B=M;

如此反复下去当M为0时此时的B就是最大公约数。

二、方法一实现功能

#include<stdio.h>
int main(){
	int a,b;
	int min,max;
	int i=1;
	int s,m;
	printf("请输入两个正整数,中间用空格隔开:"); 
	scanf("%d %d",&a,&b); 
	 if(a>b)  //找出二者之间的最大值 
	 {
	 	max=a;
	 	min=b;
	 }
	 else{
	 	max=b;
	 	min=a;
	 }
	 for(i=2;i<min;i++) 
	 {
	 	if(a%i==0&&b%i==0)  //判断是不是公因子 
		 {
	 		s=i; //这里不能用break结束循环 
		 }
	 } 

	 i=max;
	 while(1){  //死循环通过break跳出 
	 	if(i%a==0&&i%b==0)  //判断是不是公倍数 
		 {
	 	    m=i;
	 		break;  //找到的第一个公倍数就是最小公倍数,所以直接结束循环 
		 }
		 i++;
	 }
	 printf("%d和%d的最小公倍数为:%d\n%d和%d的最大公约数为:%d\n",a,b,m,a,b,s);
   return 0;
} 

三,方法二---优化代码(辗转相除法)

小知识:两个数最小公倍数乘以最大公约数等于这两个数相乘,所以我们求出最大公约数过后可以通过这个等式求出最小公倍数。

#include<stdio.h>
int main(){
	int a,b;
	int min,max;
	int i=1;
	int s,m;  
	printf("请输入两个正整数,中间用空格隔开:"); 
	scanf("%d %d",&a,&b); 
	 if(a>b)  //找出二者之间的最大值 
	 {
	 	max=a;
	 	min=b;
	 }
	 else{
	 	max=b;
	 	min=a;
	 }
	 while(s==0){  //s表示余数,余数为零时结束循环 
	 	s=max%min;
	 	max=min;
	 	min=s;
	 } 
       m=a*b/min; //求出最小公倍数 ,此时min表示的是最大公约数
     printf("%d和%d的最小公倍数为:%d\n%d和%d的最大公约数为:%d\n",a,b,m,a,b,min);
   return 0;
} 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿鹏别摆烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值