最大公约数和最小公倍数算法总结
来源:互联网 发布:tuigirl88最新域名 编辑:程序博客网 时间:2024/05/16 13:45
求最大公约数和最小公倍数
假设有两个数a和b,求a,b的最大公约数和最小公倍数实际上是一个问题,得出这两个数的最大公约数就可以算出它们的最小公倍数。最小公倍数的公式是a*b/m,m为最大公约数。
法一:穷举法
#include<stdio.h>
main()
{
int m,n,i;
scanf("%d%d",&m,&n);
for(i=m;;i--)
if(m%i==0&&n%i==0) break;
printf("%d,%d ",i,m*n/i);
}
---------------------------------------
#include<stdio.h>
main()
{
int m,n,t,i;
scanf("%d%d",&m,&n);
for(i=1;i<=(m<n?m:n);i++)
if(!(m%i)&&!(n%i)) t=i;
printf("%d,%d ",t,m*n/t);
}
法二:辗转相除法
#include<stdio.h>
main()
{
int m,n,t,r;
scanf("%d%d",&m,&n);
r=m*n;
t=m%n;
while(t)
{m=n;n=t;t=m%n;}
printf("%d,%d ",n,r/n);
}
——————————————————————
#include<stdio.h>
int gcd(int a,int b)//最大公约数greatest common divisor
{
if (a<b) return gcd(b,a);
else if (b==0) return a;
else return gcd(b,a%b);
}
int lcm(int a,int b)
{
return a*b/gcd(a,b);//最小公倍数lowest common mutiple
}
main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("最大公约数:%d\n",gcd(a,b));
printf("最小公倍数:%d\n",lcm(a,b));
}
分析:
402=8;
32%8=0;
故最大公约数为8
最小公倍数40*32/8=160
法三:更相减损法
#include<stdio.h>
main()
{
int m,n,r;
scanf("%d%d",&m,&n);
r=m*n;
while(m!=n)
if(m>n) m=m-n;
else n=n-m;
printf("%d,%d ",m,r/m);
}
分析:
40-32=8;
32-8=24;
24-8=16;
16-8=8;
8=8=0;
- 最大公约数和最小公倍数算法总结
- 最大公约数和最小公倍数算法
- 算法---最小公倍数和最大公约数
- 趣味算法- 最大公约数和最小公倍数
- 最大公约数和最小公倍数 递归算法
- JAVA算法---最大公约数和最小公倍数
- 求最大公约数和最小公倍数算法
- 最大公约数和最小公倍数求法总结
- 最大公约数和最小公倍数的总结
- 转:最大公约数和最小公倍数的算法
- 简单算法--求最大公约数和最小公倍数
- 欧几里德算法求最大公约数和最小公倍数
- 简单经典算法之最大公约数和最小公倍数
- 算法基础练习--最大公约数和最小公倍数
- 使用stein 算法计算 最大公约数和最小公倍数
- 使用stein 算法计算 最大公约数和最小公倍数
- C语言求最大公约数和最小公倍数算法
- 求最小公倍数和最大公约数的算法
- 数塔(2084)
- 青年歌手大奖赛(2014)
- 过河卒(dp算法)
- 砝码称重(dp)
- The kth great number
- 最大公约数和最小公倍数算法总结
- Daydream(2668)
- ubuntu 下安装vim
- 偶数求和(2015)
- 数据的交换输出(2016)
- 字符串统计(2017)
- A hard puzzle(1097)
- Self Numbers(1128)
- Factorial(1124)