最大公约数;最小公倍数

辗转相除法

  1. int gcd(int m, int n){
  2. int remainder;
  3. while(remainder!= 0){
  4. remiander = m%n;
  5. m = n;
  6. n = remainder;
  7. }
  8. return m;
  9. }

有两整数a和b:

① a%b得余数c

② 若c=0,则b即为两数的最大公约数

③ 若c≠0,则a=b,b=c,再回去执行①

最小公倍数(lcm)=两整数的乘积÷最大公约数

来自为知笔记(Wiz)

时间: 2024-11-13 10:29:23

最大公约数;最小公倍数的相关文章

12--c完数/最大公约数/最小公倍数/素数/回文数

完数/最大公约数/最小公倍数/素数/回文数 2015-04-08 10:33 296人阅读 评论(0) 收藏 举报  分类: C/C++(60)  哈尔滨工业大学(8)  版权声明:本文为博主原创文章,未经博主允许不得转载. 1.一个正整数的因子是所有可以整除它的正整数.而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数.例如6=1+2+3(6的因子是1,2,3). [cpp] view plain copy #include <stdio.h> #include <math.h

两种方法求最大公约数最小公倍数

<pre name="code" class="cpp">/* *coyright(c)2014 龙城无泪 *All rights reserved *文件名称 digui.c *作者:封尘之魂 *完成日期:20141108 *版本号V1.0 *问题描述:求两个整数的最大公约数最小公倍数 *输入描述:输入两个整数 *输出描述:成功输出最大公约数最小公倍数 */ #include<stdio.h> int main() {int m,n,q,t

最大公约数 最小公倍数--------专题

#include <stdio.h> int gcd(int m,int n){ if(n==0)  return m;else return gcd(n,m%n); } ************* 变形一 int gcd(int m,int n) { if(m%n==0)  return m; else return gcd(n,m%n); } 变形二 int gcd(int m,int n) { return  n==0?  m :  gcd(n,m%n); } 变形三 int gcd(i

Java最大公约数 最小公倍数

/** * CommonDiviser.java * @author:王超 * 2017年3月15日 * wangChaoPA实习工作练习.com.最大公约数和最小公倍数.CommonDiviser * Copyright (c) 2007, 2016 Infopower corporation All Rights Reserved. */package wangChaoPA实习工作练习.com.最大公约数和最小公倍数; import java.util.Scanner; /** * o * 

最大公约数最小公倍数

int gcd(int a, int b) //最大公约数 { int m,n,r; m=a>=b?a:b; //m保存较大数 n=a<b?a:b; //n保存较小数 r=m%n; //求余数 while(r!=0) //辗转相除 { m=n; n=r; r=m%n; } return n; //返回最大公约数 } int lcm(int a,int b) //最小公倍数 { int t = gcd(a,b); //获取最大公约数 return (a*b)/t; //返回最小公倍数 }

欧几里得算法求最大公约数+最小公倍数

1,两个数互质:如果说两个数的公因数只有1,则可以说这两个数互质. 欧几里得算法求最大公约数: 首先求最大公约数,假设我们要求a和b的最大公约数 设a mod b = c: 可以得到一下的递推过程: a = kb + c ; 假设a , b 的最大公约数为d,则可以得到: a = md , b = nd; 可知m , n 互质: c = a - kb = md - knd = (m-kn)d; 我们已经知道m,n互质,则可以知道n和m-kn互质,则c和b的最大公约数也是d; 所以由以上的推论,我

抓其根本(hdu2710 Max Factor 素数 最大公约数 最小公倍数.....)

素数判断: 一.根据素数定义,该数除了1和它本身以外不再有其他的因数. 详见代码. 1 int prime() 2 { 3 for (int i=2; i*i<=n; i++) 4 { 5 if (n%i==0) //不是素数 6 return 1; //返回1 7 } 8 return 0; //是素数返回0 9 } 二.打表,将所有的素数一一列出,存在一个数组里. 详见代码. 1 void prime() 2 { 3 for (int i=2; i<20050; i++) //从2开始一个

最大公约数最小公倍数高效算法

一般来说求两个数最大公约数,我们最先想到的是先找到两个数中较小的数, 然后从较小的数开始递减暴力搜索,如果能同时被两个数整除,那么这个数就是最大公约数,不能则继续递减. 但是当两个数很大的时候,这个算法的效率就变得很差,这时我们就需要一个高效算法. 这里我们利用的是中国古代的辗转相除法,关于辗转相除法的思想可以自行百度,我在这里直接贴代码 #include<stdio.h> int gcd(int a, int b){ if (a == 0) return b; return gcd(b %

Num 19: 最大公约数.最小公倍数.素数的判断

在c语言的学习之中,经常会碰到: 计算最大公约数,最小公倍数和素数判断的问题: 在这里由浅入深总结一下: 1. 最大公约数与最小公倍数 : 由数学知识我们知道:       两个数的最小公倍数 = 这两个数的乘积 / 两个数的最大公约数:    所以求最大公约数和最小公倍数的问题其实是一类问题:  ①.最小公倍数:      方法一:        若 x>y ,从 x开始,判断x能否被y整除(x%y==0):        若能够整除,x既为最小公倍数:        若不能整除,计算2x,3

特殊数求解(最大公约数/最小公倍数/素数)

1.最大公约数(GCD) (1)如果a,b全为0,GCD不存在 (2)如果a.b其中之一为0,则GCD为a.b中非零的那个 (3)如果a.b都不为0,则使新的a=b,b=a%b,然后重复过程. 非递归 int gcd(int a, int b){ while (b != 0){ int t = a%b; a = b; b = t; } return a; } 递归 int gcd(int a,int b){ return b!=0?gcd(b,a%b):a; } 2.最小公倍数(LCM) 最小公