c语言编程最大公约数穷举发,C语言基本算法 :1.求最大公约数与最小公倍数

C语言基本算法 :1.求最大公约数与最小公倍数

一.最大公约数:

最大公约数目前有三种求法:更相减损术、辗转相除法以及穷举法。

1.更相减损术:

算法介绍:设两个整数数a和b,以较大数减较小数,得出的差与减数比较大小,再次使用较大数减较小数,直到减数与差相等,此时减数(差)即为最大公约数。

代码展示:

#include

#include

int main()

{

int a,b,c,i;

printf("请输入你比较的数字:");

scanf("%d",&a);

printf("请输入你比较的数字:");

scanf("%d",&b);

for(;a!=b;)

{

c=abs(a-b);

if(a>b)

a=c;

else if(a

b=c;

if(a==b)

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

}

return 0;

}

注意:

1.1 实际更相减损术中需要判断a与b是否均为偶数,若是则要以二约分,最终计算的结果还要乘以约掉的若干二的积。由于计算机编程语言的循环特性,此步可以忽略。

1.2 利用函数abs()时,此时注意预编译指令要加上#include,否则程序虽然可以运行,但是会报出一个警告。

2.辗转相除法:

算法介绍:设两个整数a和b,计算a%b得余数c,若c等于零,则b为最大公约数;若c不等于零,则将b的值赋给a,将c的值赋给b,重复计算a%b。

代码展示:

#include

int main()

{

int a,b,c;

printf("请输入数值1:");

scanf("%d",&a);

printf("请输入数值2:");

scanf("%d",&b);

while(1)

{

c=a%b;

if(c==0)

{

printf("最大公约数为:%d",b);

break;

}

else

a=b;

b=c;

}

return 0;

}

3.穷举法:

算法介绍:穷举法利用了计算机的特性,实际算法即为一个一个试,类似于求素数。

代码展示:

int main()

{

int i,a,b,t;

printf("请输入a的值:");

scanf("%d",&a);

printf("请输入b的值:");

scanf("%d",&b);

if(a>b)

{

t=a;

a=b;

b=t;

}

for(i=a;i>0;i--)

{

if((a%i==0)&&(b%i==0))

{

printf("最大公约数为:%d",i);

break;

}

}

}

注:对a和b的交换可以简化算法。

二.最小公倍数:

最小公倍数的求法一般来说比较简单,分为穷举和利用最小公倍数求解两种方法。

1.穷举法:

代码展示:

int main()

{

int i,a,b,t;

printf("请输入a的值:");

scanf("%d",&a);

printf("请输入b的值:");

scanf("%d",&b);

if(a

{

t=a;

a=b;

b=t;

}

for(i=a;;i++)

{

if((i%a==0)&&(i%b==0))

{

printf("最小公倍数为:%d",i);

break;

}

}

}

注:最小公倍数与最大公约数的求法类似,可自行比对。

2.利用最大公约数求最小公倍数:

算法介绍:存在这样的关系:a*b/最小公倍数=最大公约数。故直接利用最大公约数的求法即可。

代码展示:

#include

#include

int main()

{

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

printf("请输入你比较的数字:");

scanf("%d",&a);

printf("请输入你比较的数字:");

scanf("%d",&b);

m=a;

n=b;

for(;a!=b;)

{

c=abs(a-b);

if(a>b)

a=c;

else if(a

b=c;

if(a==b)

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

}

return 0;

}

标签:公倍数,scanf,C语言,int,最大公约数,printf,include

来源: https://blog.csdn.net/m0_53173759/article/details/113031905

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值