你所不知道的求三个数的最小公倍数的解法

37人阅读 评论(0) 收藏 举报

从键盘上输入三个数,求其最小公倍数。

分析:最小公倍数是指能整除这三个数的公倍数中的最小者,可以利用循环穷举的方法,看是否能整除这三个数。若能整除这三个数,则输出其中的最小的数即为最小公倍数。

第一种方法:最常见的方法。
常见代码如下:

    #include<stdio.h>
int max(int a,int b,int c)  //自定义函数max
{
  if(a>b&&a>c)            // 若a的值最大
      return a;           // 返回a
  else if(b>a&&b>c)       // 若b的值最大
      return b;           // 返回b
  else
      return c;           //   否则返回c
}
void main()
{
  int x,y,z,i,j,k;
  printf("请输入三个数:");
  scanf("%d%d%d",&x,&y,&z); // 从键盘输入三个数
  k = max(x,y,z);          //调用max函数求出其中的最大值
  i= 1;
  1hile(1)                 //while循环,条件值为1
  { 
    j = k * i;
    if((j%x==0)&&(j%y==0)&&(j%z==0)) //满足条件,退出循环
        break;
    i++;
  }
  printf("最小公倍数为%d\n",j);
}

运行结果如下:
这里写图片描述

第二种方法:通过短除法实现。
短除法: 短除法思想为求三个数的因素,然后求这些因素的求积。算法设计代码如下:

 #include<stdio.h>
int max(int a,int b,int c)
{
  if(a>b&&b>c)
      return a;
  else if(b>a&&b>c)
      return b;
  else
      return c;
}
void main()
{
  int x,y,z,i,j,k,t=1;
  printf("请输入三个数:");
  scanf("%d%d%d",&x,&y,&z);
  k = max(x,y,z);
  for(i=2;i<=k;i++)
  {
    j = 1;
    while(j)
    {
      j=0;
      if(x%i==0)
      {
        x = x/i;
        j = 1;
      }
      if(y%i==0)
      {
        y = y/i;
        j = 1;
      }
      if(z%i==0)
      {
        z = z/i;
        j = 1;
      }
      if(j==1)
          t = t * i;
    }
    k = max(x,y,z);
  }
  printf("最小公倍数为:%d\n",t);
} 

运行结果如下:
这里写图片描述
代码分析:利用短除法求三个数的因子,然后求所有因子的乘积,即为最小公倍数,其中 j 作为循环是否进行的标志。
运行结果:该程序的执行结果与算法1 的结果一样。
第三种方法 : 求三个数的最小公倍数,可以先求两个数的最小公倍数,然后利用函数的嵌套求这三个数的最小公倍数。算法如下:

   #include<stdio.h>
int f(int x,int y)
{
  int a, b, c;
  a = x;
  b = y;
  c = x%y;
  while(c!=0)
  {
    x = y;
    y = c;
    c = x%y;
  }
  return a*b/y;
}
void main()
{
    int a , b , c , d;
    printf("请输入三个数:");
    scanf("%d%d%d",&a,&b,&c);
    d = f( f(a,b),c);          //嵌套调用函数f()求解
    printf("最小公倍数为:%d\n",d);
} 

运行结果如下:
这里写图片描述
代码分析:第2~15行,自定义函数 f(),用来求两个数的最小公倍数,第21行,嵌套调用函数 f(),求得三个数的最小公倍数。
运行结果:该程序的执行结果与算法1和算法2 的结果一样。

查看评论

趣味分数-三个数的最小公倍数-java

问题描述: 求任意3个整数的最小公倍数。 import java.util.Arrays; public class Main { public static void main(Strin...
  • qq_34594236
  • qq_34594236
  • 2016-04-26 14:13:22
  • 1158

求任意三个数的最小公倍数

#include #include using namespace std; int maxNum(int x, int y, int z) { if (x>y && x>z) ...
  • u011954296
  • u011954296
  • 2016-04-06 15:09:35
  • 499

蓝桥杯--求3个数的最小公倍数

细心的人不难发现,这个坑爹的蓝桥杯的OJ做的如此之粗糙与恶劣,还设置了坑爹的VIP,想钱之疯魔程度,简直是不忍直视啊。题目上面说1~N-1, 后面给的样例就变成的从1~N里面筛选,这种赤裸裸的扇自己脸...
  • u010458863
  • u010458863
  • 2014-02-18 22:56:18
  • 1638

求三个数的最小公倍数

给定程序中求三个数的最小公倍数,比如,输入变量a,b,c三个数分别为11,15,2.则输出的结果为330。 #include #include int func(int x,int y,int ...
  • yang6464158
  • yang6464158
  • 2014-02-22 20:01:54
  • 835

C语言实现3个数的最小公倍数和最大公约数

根据求两个数的最小公倍数和最大公约数的方法求3个数的最大公约数和最小公倍数。 主要的思想就是利用a%b==0&a%c==0这样的来判断是否满足,再利用循环计数即可。#include int main...
  • a1b2c3d4123456
  • a1b2c3d4123456
  • 2015-06-30 22:36:21
  • 3561

求三个数的最小公倍数(核桃的数量)

先求中三者中最大的数,然后成倍数增加,再分别和每个数取余,若都为0,此数即为最小公倍数package lanqiaobei;import java.util.Scanner;public class ...
  • cuicuicui96
  • cuicuicui96
  • 2017-03-06 10:27:10
  • 228

Java-求若干个数的最小公倍数

  • 2008年05月13日 13:15
  • 1KB
  • 下载

如何求多个数的最小公倍数

历届试题 核桃的数量   时间限制:1.0s   内存限制:256.0MB     问题描述 小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为...
  • yzz123123
  • yzz123123
  • 2017-02-11 15:12:40
  • 621

java代码求n个数的最小公倍数,HDOJ 2028,3种方法实现

题目链接点击打开链接 题目大意为:求n个正整数的最小公倍数 解题思路:求最小公倍数的方法我们在数学中学到过,我知道的有2种方法分别是 (1)求最大公约数法 (2)使用辗转相除法求 比如:下图为求 2 ...
  • Dragon_Dai_2017
  • Dragon_Dai_2017
  • 2017-04-20 20:13:11
  • 2647

1~N中随机选三个数,求其最大的 最小公倍数。

N的范围是1~10E6 自己的想法是:N 的范围比较大,自己可以选出范围内最大的那个质数Z,然后再乘以范围最大的连个不同的数,就可以得出最大的 最小公倍数。错误第一个,这样的三个数直接相乘得到其最小公...
  • Aime521
  • Aime521
  • 2015-11-09 22:01:46
  • 533
    个人资料
    持之以恒
    等级:
    访问量: 81
    积分: 142
    排名: 113万+
    文章分类
    文章存档