标签:公倍数 scanf C语言 int 最大公约数 printf include
C语言基本算法 :1.求最大公约数与最小公倍数
一.最大公约数:
最大公约数目前有三种求法:更相减损术、辗转相除法以及穷举法。
1.更相减损术:
算法介绍:设两个整数数a和b,以较大数减较小数,得出的差与减数比较大小,再次使用较大数减较小数,直到减数与差相等,此时减数(差)即为最大公约数。
代码展示:
#include <stdio.h>
#include <math.h>
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)
b=c;
if(a==b)
printf("最大公约数为:%d",a);
}
return 0;
}
注意:
1.1 实际更相减损术中需要判断a与b是否均为偶数,若是则要以二约分,最终计算的结果还要乘以约掉的若干二的积。由于计算机编程语言的循环特性,此步可以忽略。
1.2 利用函数abs()时,此时注意预编译指令要加上#include<math.h>,否则程序虽然可以运行,但是会报出一个警告。
2.辗转相除法:
算法介绍:设两个整数a和b,计算a%b得余数c,若c等于零,则b为最大公约数;若c不等于零,则将b的值赋给a,将c的值赋给b,重复计算a%b。
代码展示:
#include <stdio.h>
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<b)
{
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 <stdio.h>
#include <math.h>
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)
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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。