gcd(a, b),就是求a和b的最大公约数

lcm(a, b),就是求a和b的最小公倍数

然后有个公式

a*b = gcd * lcm     ( gcd就是gcd(a, b), ( •̀∀•́ ) 简写你懂吗)

解释(不想看就跳过){

  首先,求一个gcd,然后。。。

  a / gcd 和 b / gcd 这两个数互质了,也就是 gcd(   a / gcd ,b / gcd  )  =  1,然后。。。

  lcm = gcd *  (a / gcd) * (b / gcd)

  lcm = (a * b) / gcd

  所以。。a*b = gcd * lcm

}

所以要求lcm,先求gcd

辣么,问题来了,gcd怎么求

辗转相除法

while循环

LL gcd(LL a, LL b){
LL t;
while(b){
t = b;
b = a % b;
a = t;
}
return a;
}

还有一个递归写法

LL gcd(LL a, LL b){
if(b == 0) return a;
else return gcd(b, a%b);
} LL gcd(LL a, LL b){
return b ? gcd(b, a%b) : a;
}
//两种都可以

辣么,lcm = a * b / gcd

(注意,这样写法有可能会错,因为a * b可能因为太大  超出int  或者 超出 longlong)

所以推荐写成 : lcm = a / gcd * b

然后几个公式自己证明一下

gcd(ka, kb) = k * gcd(a, b)

lcm(ka, kb) = k * lcm(a, b)

上次做题碰到这个公式

lcm(S/a, S/b) = S/gcd(a, b)

S = 9,a = 4,b = 6,小数不会lcm,只好保留分数形式去通分约分。

当我看到右边那个公式。。。。

(╯°Д°)╯┻━┻

这TM我怎么想的到,给我证明倒是会证。 T_T

【附录】

这里给出使用欧几里得算法求最大公约数的递归和非递归的程序,同时给出穷举法求最大公约数的程序。

从计算时间上看,递推法计算速度最快。

程序中包含条件编译语句用于统计分析计算复杂度。

/*
* 计算两个数的最大公约数三种算法程序
*/ #include <stdio.h> //#define DEBUG
#ifdef DEBUG
int c1=, c2=, c3=;
#endif int gcd1(int, int);
int gcd2(int, int);
int gcd3(int, int); int main(void)
{
int m=, n=; printf("gcd1: %d %d result=%d\n", m, n, gcd1(m, n));
printf("gcd2: %d %d result=%d\n", m, n, gcd2(m, n));
printf("gcd3: %d %d result=%d\n", m, n, gcd3(m, n));
#ifdef DEBUG
printf("c1=%d c2=%d c3=%d\n", c1, c2, c3);
#endif return ;
} /* 递归法:欧几里得算法,计算最大公约数 */
int gcd1(int m, int n)
{
#ifdef DEBUG
c1++;
#endif
return (m==)?n:gcd1(n%m, m);
} /* 迭代法(递推法):欧几里得算法,计算最大公约数 */
int gcd2(int m, int n)
{
while(m>)
{
#ifdef DEBUG
c2++;
#endif
int c = n % m;
n = m;
m = c;
}
return n;
} /* 连续整数试探算法,计算最大公约数 */
int gcd3(int m, int n)
{
if(m>n) {
int temp = m;
m = n;
n = temp;
}
int t = m;
while(m%t || n%t)
{
#ifdef DEBUG
c3++;
#endif
t--;
}
return t;
}

关键代码(正解):

/* 迭代法(递推法):欧几里得算法,计算最大公约数 */
int gcd(int m, int n)
{
while(m>0)
{
int c = n % m;
n = m;
m = c;
}
return n;
}

数论3——gcd&&lcm的更多相关文章

  1. 数论入门2——gcd,lcm,exGCD,欧拉定理,乘法逆元,(ex)CRT,(ex)BSGS,(ex)Lucas,原根,Miller-Rabin,Pollard-Rho

    数论入门2 另一种类型的数论... GCD,LCM 定义\(gcd(a,b)\)为a和b的最大公约数,\(lcm(a,b)\)为a和b的最小公倍数,则有: 将a和b分解质因数为\(a=p1^{a1}p ...

  2. 【HDU 5382】 GCD?LCM! (数论、积性函数)

    GCD?LCM! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  3. Mathematics:GCD & LCM Inverse(POJ 2429)

    根据最大公约数和最小公倍数求原来的两个数 题目大意,不翻译了,就是上面链接的意思. 具体思路就是要根据数论来,设a和b的GCD(最大公约数)和LCM(最小公倍数),则a/GCD*b/GCD=LCM/G ...

  4. Least Common Multiple (HDU - 1019) 【简单数论】【LCM】【欧几里得辗转相除法】

    Least Common Multiple (HDU - 1019) [简单数论][LCM][欧几里得辗转相除法] 标签: 入门讲座题解 数论 题目描述 The least common multip ...

  5. 洛谷 UVA11388 GCD LCM

    UVA11388 GCD LCM Description of the title PDF The GCD of two positive integers is the largest intege ...

  6. POJ 2429 GCD & LCM Inverse (Pollard rho整数分解+dfs枚举)

    题意:给出a和b的gcd和lcm,让你求a和b.按升序输出a和b.若有多组满足条件的a和b,那么输出a+b最小的.思路:lcm=a*b/gcd   lcm/gcd=a/gcd*b/gcd 可知a/gc ...

  7. [POJ 2429] GCD & LCM Inverse

    GCD & LCM Inverse Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10621   Accepted: ...

  8. POJ 2429 GCD & LCM Inverse(Pollard_Rho+dfs)

    [题目链接] http://poj.org/problem?id=2429 [题目大意] 给出最大公约数和最小公倍数,满足要求的x和y,且x+y最小 [题解] 我们发现,(x/gcd)*(y/gcd) ...

  9. UVA - 11388 GCD LCM

    II U C   ONLINE   C ON TEST  Problem D: GCD LCM Input: standard input Output: standard output The GC ...

随机推荐

  1. 修改zabbix字体格式

    环境: centos7 zabbix3.2 1.获取喜欢的字体格式文件(喜欢别的字体也可以去网上下载) 通常都是ttf格式,可直接在windows下获取C:\Windows\Fonts 2.配置zab ...

  2. sersync实时同步实战

    第1章 实时同步 1.1 什么是实时同步 实时同步是一种只要当前目录触发事件,就马上同步到远程的目录.rsync 1.2 为什么要实时同步web->nfs->backup 保证数据的连续性 ...

  3. CSS3--j惊艳到你的新前端

    一.css3的选择器 1. 父子选择器 直接关系 .box>.com 2. 兄弟选择器 相邻关系 .box+.com <span>hello</span> <p&g ...

  4. 【super vlan的配置】

    Super vlan的配置 一:根据项目需求搭建好拓扑图如下: 二:配置 1:由项目图进行理论分析:sw1属于三层交换,用于二层交换信息的转发;同时在sw1上可定义super vlan把sub vla ...

  5. vue服务端渲染提取css

    vue服务端渲染,提取css单独打包的好处就不说了,在这里主要说的是抽取css的方法 要从 *.vue 文件中提取 CSS,可以使用 vue-loader 的 extractCSS 选项(需要 vue ...

  6. 主流浏览器内核,以及CSS3前缀识别码

    现在国内常见的浏览器有:IE.Firefox.QQ浏览器.Safari.Opera.Google Chrome.百度浏览器.搜狗浏览器.猎豹浏览器.360浏览器.UC浏览器.遨游浏览器.世界之窗浏览器 ...

  7. nginx2goaccess.sh脚本内容

    脚本github地址:https://github.com/stockrt/nginx2goaccess/blob/master/nginx2goaccess.sh 脚本内容: #!/bin/bash ...

  8. fabric Report API

    1.Token生成 接口 : post https://fabric.io/oauth/token 请求头:Headers Content-Type : application/json 正文: bo ...

  9. SHELL里执行HIVE导出文件处理成CSV文件

    #!/bin/bash #用途: #.当前目录的txt文件批量转csv #.制表符转逗号分隔符 #.NULL去除 #.删除WARN警告 for i in `ls ./*.txt` do sed -e ...

  10. Python正则表达式-基础

    Python正则表达式-基础 本文转载自昔日暖阳,原文地址:http://www.osheep.cn/4806.html python使用正则,需要先引入re模块 import re 匹配符 单个字符 ...