算法基础练习--最大公约数和最小公倍数

var gcd = function (n1,n2){ //最大公约数
if(n1 == n2 ){return n1;}

var bigger = 0;
var smaller = 0;
if(n1 > n2){bigger = n1;smaller = n2;}
else {bigger = n2;smaller = n1;}

for(var j = 1; j <= smaller ; j++){
if(smaller%(smaller/j) != 0){continue;}
if(bigger % (smaller / j) == 0){return smaller/j;}
}

return undefined;
}

//最小公倍数
var lcm = function (n1,n2){
if(n1 == n2){return n1;}
var bigger = 0;
var smaller = 0;
if(n1 > n2){bigger = n1;smaller = n2;}
else {bigger = n2;smaller = n1;}

for(var i = 2; i <= bigger; i++){
if(i * smaller % bigger == 0){ return i * smaller;}
}
return undefined;

}
时间: 2024-10-08 11:10:05

算法基础练习--最大公约数和最小公倍数的相关文章

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

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

Python基础之最大公约数与最小公倍数

a=int(raw_input('a'))b=int(raw_input('b'))su=[]if a>b:    smaller=b    else:    smaller=a   for i in range(1,smaller+1):    if a%i==0 and b%i==0:        su.append(i) l=len(su)p=su[l-1] print '最大公约数:',pprint '最小公倍数:',a*b/p

PAT - 基础 - 最大公约数和最小公倍数

题目: 本题要求两个给定正整数的最大公约数和最小公倍数. 输入格式: 输入在一行中给出2个正整数M和N(<=1000). 输出格式: 在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔. 输入样例: 511 292 输出样例: 73 2044 两种方法1.辗转相除法求最大公约数流程如下: 算法 #include<stdio.h> #include<stdlib.h> int main() { int M,N; scanf("%d%d",&

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

#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.相

求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,

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

算法一 任何>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