[算法]最大公约数和最小公倍数

基于辗转相除的算法实现的基于javascript的最大公约数(GCD)与最小公倍数(LCM)算法。

function gcd(m, n){
    var c = n % m;
    if(c)return arguments.callee(c, m);
    else return m;
}

function lcm(m, n){
    return m/gcd(m,n)*n;
}
时间: 2024-10-24 11:24:09

[算法]最大公约数和最小公倍数的相关文章

一步一步写算法(之 最大公约数、最小公倍数)

原文:一步一步写算法(之 最大公约数.最小公倍数) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 求解最小公倍数和最大公约数是我们开始编程的时候经常需要练习的题目.从题面上看,好像我们需要求解的是两个题目,但其实就是一个题目.那就是求最大公约数?为什么呢?我们可以假想这两个数m和n,假设m和n的最大公约数是a.那么我们可以这样写: m = b *a: n = c * a; 所以m和n的最小公倍数就应该是a*b*c啊,那不就是m * n

最大公约数、最小公倍数算法

#include <iostream> using namespace std; //举例: // 2 | 8 6 // ---------- // 4 3 // 所以:gcd=2,lcm=2*4*3=24 //求最大公约数:辗转相除法 // 1. a ÷ b,令r为所得余数(0≤r<b) // 若 r = 0,算法结束:b 即为答案. // 2. 互换:置 a←b,b←r,并返回第一步 int gcd1(int m, int n) { int r; while(n) { r = m %

一天一个算法:求俩个数的最大公约数和最小公倍数

求俩个数的最大公约数和最小公倍数 解答: 当较大数除以较小数余数等于0时,较小数为最大公约数. 两数相乘结果除以它们的最大公约数为最小公倍数. int cdivisor(int x1,int y1) { int r,temp; if (x1<y1) { temp =x1; x1 = y1; y1 = temp; } while(x1%y1)//当较大数除以较小数余数等于0时,较小数为最大公约数 { r=x1%y1; x1=y1; y1=r; } return y1; } int cmultipl

C语言之基本算法10—最大公约数和最小公倍数

/* ================================================================== 题目:求两个数的最大公约数和最小公倍数. ================================================================== */ #include<stdio.h> main() { int m,n,r,t,j,q; printf("输入两整数:\n"); scanf("%d

求最大公约数 和 最小公倍数 常见算法

#include <stdio.h>int main(){ int a,b,t,c,m,n; scanf("%d%d",&a,&b); m=a; n=b; //1.辗转相除法求最大公约数 /*while(b!=0) { c = a%b; a = b; b = c; } printf("最大公约数: %d\n",a);//最大公约数 printf("最小公倍数: %d\n",m*n/a);//最小公倍数 */ //2.相

计算两个整数的最大公约数和最小公倍数

算法一 任何>1的整数都可以写成一个或多个素数因子乘积的形式,且素数乘积因子以非递减序出现. 则整数x,y可以分别标记为:x=p1x1p2x2...pmxm y=p1y1p2y2...pmym (其中p1,p2,....是素数,若有必要素数因子的指数xj或yj可以为0) (1)最大公约数 gcd(x,y)=p1min(x1,y1)p2min(x2,y2)...pmmin(xm,ym) (2)最小公倍数 lcm(x,y)=p1max(x1,y1)p2max(x2,y2)...pmmax(xm,ym

求N个数的最大公约数和最小公倍数

除了分解质因数,还有另一种适用于求几个较小数的最大公约数.最小公倍数的方法 下面是数学证明及算法实现 令[a1,a2,..,an] 表示a1,a2,..,an的最小公倍数,(a1,a2,..,an)表示a1,a2,..,an的最大公约数,其中a1,a2,..,an为非负整数.对于两个数a,b,有[a,b]=ab/(a,b),因此两个数最小公倍数可以用其最大公约数计算.但对于多个数,并没有[a1,a2,..,an]=M/(a1,a2,..,an)成立,M为a1,a2,..,an的乘积.例如:[2,

C语言之函数调用08—暴力法求4个数的最大公约数和最小公倍数

//数组枚举法 /* ========================================================== 题目:求4个数的最大公约数和最小公倍数. ========================================================== */ #include<stdio.h> #define N 4 main() { int a[N],gys,gbs; int i,j,m=1; int flag=1; printf("输

C语言求最大公约数和最小公倍数

求最大公约数和最小公倍数 假设有两个数a和b,求a,b的最大公约数和最小公倍数实际上是一个问题,得出这两个数的最大公约数就可以算出它们的最小公倍数. 最小公倍数的公式是 a*b/m m为最大公约数 因为 a=m*i; b=m*j; 最小公倍数为 m*i*j 那么,下面就开始计算a和b的最大公约数. 更相损减法: <九章算術·方田>作分數約簡時,提到求最大公因數方法:反覆把兩數的較大者減去較小者,直至兩數相等,這數就是最大公因數.這方法除了把除法換作減法外,與輾轉相除法完全相同.例如書中求91和