最大公约数和最小公倍数(c 语言)
·
目录
最大公约数:
方法一(简单遍历):
分析:
如果是两个数a 和 b(a > b),那么他们两个的最小公约数一定位于[1, b]之间;
所以我们只需要在这个范围内进行简单的遍历即可求出最大公约数;
代码:
#include<stdio.h>
int main()
{
long long a, b;
long long min;
scanf("%d %d", &a, &b);
min = (a > b ? b : a);
for (long long i = 1; i <= min; i++)
{
if ((a % min == 0) && (b % min == 0))
{
printf("%lld", min);
return 0;
}
}
}
方法二(辗转相除法):
该方法用递归的思路比较好写就是经典的gcd函数
假设 a > b;
让后令 a = b, b = a % b;(1)
一直进行(1)直到 b = 0 的时候这时候的a就是最大公约数;
代码:
long long Gcd(long long a, long long b)
{
if (b == 0)
return a;
else
{
return Gcd(b, a % b);
}
}
方法三(更相减损法):
分析:a, b两个数字(a > b)
先将两个数字做差: a - b = c;
然后再将b和c之间做差,直到
b和c相等;
#include<stdio.h>
//更相减损法
void swap(int* a,int* b)
{
if (*a < *b)
{
int t = *a;
*a = *b;
*b = t;
}
}
int sub(int a, int b)
{
swap(&a, &b);
if (a - b == 0)
{
return a;
}
else
{
a = a - b;
sub(a, b);
}
}
int main()
{
int a, b;
scanf("%d %d", &a, &b);
printf("%d", sub(a, b));
}
最小公倍数:
方法一(简单遍历):
分析:a, b (a > b)因为最小公倍数是一定大于a 且小于a * b 的,所以我们可以在[a, a * b]这个范围内遍历然后寻找最小公倍数
代码:
#include<stdio.h>
//计算最小公倍数
Common(int a, int b)
{
int max = (a > b ? a : b);
for (int i = max; i <= a * b; i++)
{
if ((i % a == 0) && (i % b == 0))
{
return i;
}
}
}
int main()
{
int a, b;
scanf("%d %d", &a, &b);
printf("%d", Common(a, b));
}
方法二(利用最大公约数的计算结果):
最大公倍数等于两个数的乘积除以最大公约数
//辗转相除法计算
long long Gcd(long long a, long long b)
{
if (b == 0)
return a;
else
{
return Gcd(b, a % b);
}
}
int main()
{
long long a, b;
scanf("%lld %lld", &a, &b);
//先计算最大公约数
//最大公倍数等于两个数字的其中一个数除以最大公倍数,在乘上另外一个数字就得到了最小公倍数
printf("%d", a * b / Gcd(a, b));
}
方法三:单次循环的方法:
给其中一个数乘于自然数k,然后当这个乘积可以整除另外一个数的时候,那么这个乘积就是最小公倍数了
代码如下:
#include<stdio.h>
int main()
{
int a, b;
int i;
scanf("%d%d", &a, &b);
for(i = 1; i < b; i++)
{
if(a * i % b == 0)
}
printf("%d", i * a);
return 0;
}
🍉如果帮到你了,点个赞👍吧,评论区也可以互相交流。
更多推荐
已为社区贡献1条内容
所有评论(0)