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. android Service服务简介(一)

    作为android的四大组件之一,服务也少不了很多重要的知识点.下面我们从最基本的开始学习. 1.1服务的创建 首先创建一个ServiceTest类继承Service.我们会重写onCreate(), ...

  2. thinkphp3.2.3实现多条件查询实例.

    $data = M("datainfo"); $projectsname = I('get.projectsname');//前台提交的模糊查询字段 // 查询条件 $where ...

  3. APSchedule的练习使用

    1 简介 APScheduler的全称是Advanced Python Scheduler.它是一个轻量级的 Python 定时任务调度框架.APScheduler 支持三种调度任务:固定时间间隔,固 ...

  4. ECSHOP和SHOPEX快递单号查询EMS插件V8.6专版

    发布ECSHOP说明: ECSHOP快递物流单号查询插件特色 本ECSHOP快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递.顺丰快递.圆通快递.EMS快递.汇通快递.宅 ...

  5. 百度app红包? 百度全家桶?果断卸载

    听说今年的春晚红包与百度合作.这不 刚又下载了一个百度app,之前下载过,太卡了,用户体验极.本身对百度也没啥好感,再加上这周看了:百度已死的文章,搜索全百家号.具体啥情况,你们百度搜一搜吧

  6. php PHPEXcel导出

    1获取数据,2组装数据,3生成文件. 注意:无法使用ajax生成导出. $settlement = \Yii::$app->request->get('settlement'); $sav ...

  7. Hadoop(25)-高可用集群配置,HDFS-HA和YARN-HA

    一. HA概述 1. 所谓HA(High Available),即高可用(7*24小时不中断服务). 2. 实现高可用最关键的策略是消除单点故障.HA严格来说应该分成各个组件的HA机制:HDFS的HA ...

  8. Matplotlib 图表的样式参数

    1. import numpy as np import pandas as pd import matplotlib.pyplot as plt % matplotlib inline # 导入相关 ...

  9. Python3 列表,元组,字典,字符串知识小结

    一.知识概要 1. 列表,元组,字典,字符串的创建方式 2. 列表,元组,字典,字符串的方法调用 3. 列表,元组,字典,字符串的常规用法 二.列表 # 列 表 # 列表基础 list_1 = ['a ...

  10. (数据科学学习手札06)Python在数据框操作上的总结(初级篇)

    数据框(Dataframe)作为一种十分标准的数据结构,是数据分析中最常用的数据结构,在Python和R中各有对数据框的不同定义和操作. Python 本文涉及Python数据框,为了更好的视觉效果, ...