关于求最小公倍数的三种常用方法

简介: 关于求最小公倍数的三种常用方法

前言


相信大家都刷到过这种题吧,输入两个数,求出两个数的最小公倍数,我总结归纳了三种方法,希望能帮到大家。


方法一


#include<stdio.h>
void min(int a,int b)
{
  long long max = (a > b ? a : b);
  for (max; max <= a * b; max++)
    if (max % a == 0 && max % b == 0)
      break;
  printf("%lld", max);
}
int main()
{
  int a = 0;
  int b = 0;
  scanf("%d %d", &a, &b);
  min(a, b);
  return 0;
}


我们都知道,最小公倍数是大于等于两个数的较大数,小于等于两数相乘。

因此先求出两个数的最大值,再在最大值的基础上依次加一,来找出最小公倍数。


方法二


#include<stdio.h>
void min(int a, int b)
{
  int m = (a < b ? a : b);
  for (m; m > 0; m--)
    if (a % m == 0 && b % m == 0)
      break;                  //求出最大公约数 m
  long long p = a * b / m;
  printf("%lld", p);     
}
int main()
{
  int a = 0;
  int b = 0;
  scanf("%d %d", &a, &b);
  min(a, b);
  return 0;
}


我们知道最大公倍数还可以利用两数相乘再除以最大公约数来求,我们利用两数的最小值来依次减一,来找到最大公约数。


当然了,我们也可以用辗转相除法来求出最大公约数,代码如下:

#include<stdio.h>
void min(int a, int b)
{
  int m = a;        //先将 a , b 存起来
  int n = b;
  while (a % b)    //辗转相除,最后 b 即为最大公约数
  {
    int f = a % b;
    a = b;
    b = f;
  }
  long long p = m * n / b;
  printf("%lld", p);   
}
int main()
{
  int a = 0;
  int b = 0;
  scanf("%d %d", &a, &b);
  min(a, b);
  return 0;
}


方法三(最优解)


我们先来理一下思路吧,假设 k 是最小公倍数,那么下面两个式子必然成立,

k / a = i

k / b = j

那么我们可以推出 —> a * i % b=0

那么我们可以将 i 从 1 开始加起直到满足上式,即可求出最小公倍数为 a * i

我们可以写出如下代码:

#include<stdio.h>
int main()
{
  long long a = 0;
  long long b = 0;
  scanf("%lld %lld", &a, &b);
  int i = 1;
  while (a * i % b)
  {
    i++;
  }
  printf("%lld", a * i);
  return 0;
}

以上便是本期全部内容了,如果对您有帮助还请多多支持哦,文章有误还请批评指出,下期见啦~


相关文章
|
6天前
|
存储 Java
Java 编程实例:相加数字、计算单词数、字符串反转、元素求和、矩形面积及奇偶判断
Java中相加两个数字可通过简单赋值实现,如`int sum = x + y;`。若要用户输入数字相加,可使用`Scanner`类读取。计算单词数,可使用`split()`方法或`StringTokenizer`类。反转字符串,可用`for`循环或`StringBuilder`的`reverse()`方法。计算数组元素总和,可遍历数组累加。矩形面积通过长度乘以宽度得出。判断奇偶性,利用模2运算或位运算检查最低位。更多内容,可关注微信公众号`Let us Coding`。
51 0
|
6天前
|
Java
Java:计算两个数的最大公约数和最小公倍数
Java:计算两个数的最大公约数和最小公倍数
|
6天前
|
存储 Java
Java判断质数、求所有约数【蓝桥杯常用方法】
Java判断质数、求所有约数【蓝桥杯常用方法】
|
9月前
编写判断一个正整数是否为素数的函数
编写判断一个正整数是否为素数的函数
|
11月前
|
Java
Java实现数组求和
Java实现数组求和
121 0
|
11月前
|
Java
Java实现判断素数
Java实现判断素数
30 0
Java实现判断素数
|
12月前
|
Java
Java实现回文数四种方法
Java实现回文数四种方法
322 0
|
C语言
C语言(素数)[解法]:编写prime(m)判断m是否为素数,当m为素数返回1,否则返回0;
C语言(素数)[解法]:编写prime(m)判断m是否为素数,当m为素数返回1,否则返回0;
297 0
复习C部分:1.看代码求值题 2.写三个整数代码从大到小输出 3.打印1~100中所有3的倍数 4.给定两个数,求最大公约数(递减法,辗转相除法)
复习C部分:1.看代码求值题 2.写三个整数代码从大到小输出 3.打印1~100中所有3的倍数 4.给定两个数,求最大公约数(递减法,辗转相除法)
107 0
复习C部分:1.看代码求值题 2.写三个整数代码从大到小输出 3.打印1~100中所有3的倍数 4.给定两个数,求最大公约数(递减法,辗转相除法)
|
Java
求最大公约数和最小公倍数的做法(Java实现)
求最大公约数和最小公倍数的做法(Java实现)
175 0