C语言:用数学方法快速求两个数的最大公约数和最小公倍数

目录

目录

1.求两数最大公约数

        1.1 思路技巧

        1.2 程序代码

        1.3 运行结果

        2.求两数最小公倍数

        2.1 思路技巧

        2.2 程序代码

        2.3 运行结果



1.求两数最大公约数

       1.1 思路技巧

        设两个正整数a,b(a>b),且c为a/b的余数,记作c=(a%b)

        判断 c 是否 = 0 :

      (1)如果 c = 0,即a能被b整除,则最大公约数 p = b(最后一次互换后的b)

      (2)如果 c ! = 0,则令a=b,b=c,对新的a,b求余,再判断新的 c 是否 = 0 ,如果是则执

        行(1),否则重复执行 (2) 直到 c = 0

       1.2 程序代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int a, b, c, t;               //t作为互换a,b值的中间量    
	printf("请输入两个正整数:>");
	scanf("%d %d", &a, &b);
	int m = a * b;                //设 m = 输入两数的乘积
	if (a < b)				      //使满足 a > b的条件
	{
		t = a;
		a = b;
		b = t;
	}
	while (c = a % b)		      //判断 c 是否 = 0(c!=0则继续循环,c=0则跳出循环)
	{
		a = b;
		b = c;
	}
	int p = b;                    //定义 p 为最大公约数                 
	printf("最大公约数是%d", p);
	return 0;
}

       1.3 运行结果

2.求两数最小公倍数

     2.1 思路技巧

      设两个正整数a,b(a>b),且 m = a * b

      用上述方法求得a,b最大公约数p,则最小公倍数 q = m / p

     2.2 程序代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int a, b, c, t;               //t作为互换a,b值的中间量    
	printf("请输入两个正整数:>");
	scanf("%d %d", &a, &b);
	int m = a * b;                //设 m = 输入两数的乘积
	if (a < b)				      //使满足 a > b的条件
	{
		t = a;
		a = b;
		b = t;
	}
	while (c = a % b)		      //判断 c 是否 = 0(c!=0则继续循环,c=0则跳出循环)
	{
		a = b;
		b = c;
	}
	int p = b;                    //定义 p 为最大公约数  
	int q = m / p;                //定义 q 为最小公倍数
	printf("最小公倍数是%d", q);
	return 0;
}

     2.3 运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值