《最小公倍数》

什么是最小公倍数?

两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。整数a,b的最小公倍数记为[a,b],同样的,a,b,c的最小公倍数记为[a,b,c],多个整数的最小公倍数也有同样的记号。

与最小公倍数相对应的概念是最大公约数,a,b的最大公约数记为(a,b)。关于最小公倍数与最大公约数,我们有这样的定理:(a,b)x[a,b]=ab(a,b均为整数)。

定义

几个数共有的倍数叫做这几个数的公倍数,其中除0以外最小的一个公倍数,叫做这几个数的最小公倍数。

自然数a、b的最小公倍数可以记作[a,b],自然数a、b的最大公因数可以记作(a、b),当(a、b)=1时,[a、b]= a×b。如果两个数是倍数关系,则它们的最小公倍数就是较大的数,相邻的两个自然数的最小公倍数是它们的乘积。最小公倍数=两数的乘积/最大公约(因)数, 解题时要避免和最大公约(因)数问题混淆。

最小公倍数的适用范围:分数的加减法,中国剩余定理(正确的题在最小公倍数内有解,有唯一的解)。因为,素数是不能被1和自身数以外的其它数整除的数;素数X的N次方,是只能被X的N及以下次方,1和自身数整除。所以,给最小公倍数下一个定义:S个数的最小公倍数,为这S个数中所含素因子的最高次方之间的乘积。

例如:1,求756,4400,19845,9000的最小公倍数?

因756=2*2*3*3*3*7,4400=2*2*2*2*5*5*11,19845=3*3*3*3*5*7*7,9000=2*2*2*3*3*5*5*5,这里有素数2,3,5,7,11.2最高为4次方16,3最高为4次方81,5最高为3次方125,7最高为2次方49,还有素数11。得最小公倍数为16*81*125*49*11=87318000.2,自然数1至50的最小公倍数,因为,√50≈7,所以,在50之内的数只有≤7的素数涉及N次方。在50之内,2的最高次方的数为32,3的最高次方的数为27,5的最高次方的数为25,7的最高次方的数为49,其余为50之内的素数。所以,1,2,3,4,5,6,…,50的最小公倍数为:32*27*25*49*11*13*17*19*23*29*31*37*41*43*47=3099044504245996706400

代码

CoffeeScrip

gcd = (a, b) -> # 最大公约数
  return gcd b, a if a < b
  # a,b中如果有一是0,回答另一
  if b is 0 then a else gcd a % b 

scm = (a,b)->  # 求最小公倍数
  a * b / gcd(a, b)

C#

public static float minGongBeiShu(intn1,intn2)
{
int temp=Math.Max(n1,n2);
n2=Math.Min(n1,n2);//n2中存放两个数中最小的
n1=temp;//n1中存放两个数中最大的
int product=n1*n2;//求两个数的乘积
while(n2!=0)
{
n1=n1>n2?n1:n2;//使n1中的数大于n2中的数
int m=n1%n2;
n1=n2;
n2=m;
}
return(product/n1);//最小公倍数
}

C

#include<stdio.h>

int gcd(int a,int b);
int lcm(int a,int b);
int main(void)
{
int m,n,result_gcd,result_lcm;

printf("求两个数的最大公约数及最小公倍数?\n请输入你想计算的两个数:\n");
scanf("%d%d",&m,&n);
result_gcd=gcd(m,n);
result_lcm=lcm(m,n);
printf("最大公约数为:%d\n最小公倍数为:%d\n",result_gcd,result_lcm);

return 0;
}

int gcd(int a,int b)
{
int temp;
if(a<b)
{
//交换两个数,使大数放在a上
temp=a;
a=b;
b=temp;
}
while(b!=0)
{
//利用辗除法,直到b为0为止
temp=a%b;
a=b;
b=temp;
}
return a;
}


int lcm(int a,int b)
{
int temp_lcm;
temp_lcm=a*b/gcd(a,b);//最小公倍数等于两数之积除以其最大公约数
return temp_lcm;
}

C++

#include<iostream>
using namespace std;
int GCD(int a,int b);
int LCM(int a,int b);
int main()
{
int num1,num2,gcd,lcm;
cout<<"求两个数的最大公约数及最小公倍数"<<endl<<endl;
cout<<"请输入两个数:";
cin>>num1>>num2;
gcd=GCD(num1,num2);
lcm=LCM(num1,num2);//输出最大公约数和最小公倍数
cout<<"最大公约数为:"<<gcd<<endl;
cout<<"最小公倍数为:"<<lcm<<endl;
system("pause");
return 0;
}
int GCD(int num1,int num2)
{
if(num1%num2==0)
return num2;
else return  GCD(num2,num1%num2);
}
int LCM(int a,int b)
{
int temp_lcm;
temp_lcm=a*b/GCD(a,b);//最小公倍数等于两数之积除以最大公约数
return temp_lcm;
}

Python

def gcd(n1,n2):
    """greatest common divisor function """
    return gcd(n2, n1 % n2) if n2 > 0 else n1
def lcm(n1,n2):
    """lowest common multiple function"""
    return n1 * n2 // gcd(n1, n2)

JAVA

Scanner in=new Scanner(System.in);
 int a=in.nextInt();
 int b=in.nextInt();
 int c=a*b;
 if(a<b)
{
 int r=0;
 r=a;a=b;b=r;
 }
 while(true)
{
 int r=a%b;
 if(r==0){
 System.out.println("最小公倍数:"+c/b);
 break;
 }else
{
 a=b;
 b=r;
 }
}

PASCAL

var a,b,ans:integer;
function gcd(a,b:integer):longint;
begin
if b=0 then gcd:=a
else gcd:=gcd(b,a mod b);
end;
//2、
var a,b,ans:integer;
function gcd(a,b:integer):longint;
begin
readln(a,b);
ans:=(a*b) div gcd(a,b);
gcd:=ans;
end

Fortran

!gcd()gets the greatest common divisor(i.e.,higest common factor)
!lcm()gets the least common multiple
program gcd_lcm
integer::m,n
write(*,*)'Please input two integers:'
read(*,*)m,n
write(*,*)'They have the greatest common divisor:',gcd(m,n)
write(*,*)'They have the least common multiple:',lcm(m,n)

contains
integer function lcm(mm,nn)
integer,intent(in)::mm,nn
lcm=mm*nn/gcd(mm,nn)
end function lcm
!BL
integer function gcd(mm,nn)
integer,intent(in)::mm,nn
integer::m,n,r,t
m=mm
n=nn
if(m<n)then
t=m
m=n
n=t
endif
do while(r/=0)
r=mod(m,n)
if(r==0) exit
m=n
n=r
end do
gcd=n
end function gcd
end program gcd_lcm

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值