简单数论总结1——gcd与lcm
并不重要的前言
最近学习了一些数论知识,但是自己都不懂自己到底学了些什么qwq,在这里把知识一并总结起来。
也不是很难的gcd和lcm
显而易见的结论:

为什么呢?
根据唯一分解定理:
a和b都可被分解为素因子的乘积,形如:

则显而易见的有一下结论:


相乘,得:

得证
几种求gcd的算法
- 欧几里得算法(辗转相除法)
- 辗转相减法(优化:stein_gcd)
欧几里得算法
基于事实:

实现:
int gcd(int a, int b){
return (b == ) ? a : gcd( b , a % b) ;
}
简短而容易实现和记忆,非常优美
但是可能会被斐波那契数列卡住,证明或者原因鸽了回头再写
stein_gcd算法
stein_gcd本质上是对更相减损术的优化,下面进行简单的介绍:
- 若a,b都是偶数,则计算gcd(a/2,b/2)*2; ————>因为都含有2的因数,所以同时除以2后gcd(a,b)变为原来的1/2,再乘回去
- 若a是偶数,b是奇数,则计算gcd(a/2,b); ————>因为只有一个数含有2作为因数,所以除以2后gcd(a,b)不变
- 若a是奇数,b是偶数,则计算gcd(a,b/2); ————>同2.
- 若a是奇数,b是奇数,则计算gcd(abs(x-y),min(x,y)); ————>通过相减,使其变成偶数,原理参见更相减损术其实是我懒得写
实现:
int stein_gcd(int x,int y){
if(x==)
return y;
if(y==)
return x;
if(x%==&&y%==)
return stein_gcd(x>>,x>>)*;
else if(x% ==)
return stein_gcd(x>>,y);
else if(y%==)
return stein_gcd(x,y>>);
else
return stein_gcd(abs(x-y),min(x,y));
}
讲到这里,大概本期就结束了,至于没涉及到的,就是鸽了下一期的事情了
至于下一次什么时候填坑,已经在做了逃
简单数论总结1——gcd与lcm的更多相关文章
- 数学--数论--HDU 5382 GCD?LCM?(详细推导,不懂打我)
Describtion First we define: (1) lcm(a,b), the least common multiple of two integers a and b, is the ...
- Least Common Multiple (HDU - 1019) 【简单数论】【LCM】【欧几里得辗转相除法】
Least Common Multiple (HDU - 1019) [简单数论][LCM][欧几里得辗转相除法] 标签: 入门讲座题解 数论 题目描述 The least common multip ...
- 数论入门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 ...
- Pairs Forming LCM (LightOJ - 1236)【简单数论】【质因数分解】【算术基本定理】(未完成)
Pairs Forming LCM (LightOJ - 1236)[简单数论][质因数分解][算术基本定理](未完成) 标签: 入门讲座题解 数论 题目描述 Find the result of t ...
- GCD and LCM HDU 4497 数论
GCD and LCM HDU 4497 数论 题意 给你三个数x,y,z的最大公约数G和最小公倍数L,问你三个数字一共有几种可能.注意123和321算两种情况. 解题思路 L代表LCM,G代表GCD ...
- HDU 4497 GCD and LCM(数论+容斥原理)
GCD and LCM Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total ...
- 数论——算数基本定理 - HDU 4497 GCD and LCM
GCD and LCM Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total ...
- HDU4497 GCD and LCM(数论,质因子分解)
HDU4497 GCD and LCM 如果 \(G \% L != 0\) ,那么输出 \(0\) . 否则我们有 \(L/G=(p_1^{r_1})\cdot(p_2^{r_2})\cdot(p_ ...
- HDU4497——GCD and LCM
这个题目挺不错的,看到是通化邀请赛的题目,是一个很综合的数论题目. 是这样的,给你三个数的GCD和LCM,现在要你求出这三个数有多少种可能的情况. 对于是否存在这个问题,直接看 LCM%GCD是否为0 ...
随机推荐
- Yii数据对象笔记
要执行一个SQL查询,应该遵循以下步骤 - 创建一个 yii\db\Command 的 SQL查询命令 绑定参数(非必须) 执行命令 第1步 - 创建一个 actionTestDb()方法在 Site ...
- 更换tomcat运行日志目录
1.在tomcat安装文件夹的bin目录下,修改catalina.sh,改变catalina.out的输出目录 CATALINA_OUT="$CATALINA_BASE"/logs ...
- copy on write,代理模式
StringBuilder 内部用了代理的技术实现, 是可变字符串的代理 .net设计模式实例之代理模式(Proxy Pattern) 一.代理模式简介(Brief Introduction) 代理模 ...
- urlopen和urlretrieve
import urllib import re url = "https://www.duitang.com/search/?kw=%E9%AC%BC%E6%80%AA&type=f ...
- github开源的一些ip解析 ,运营商信息,经纬度 地址 后续开发使用
https://github.com/wzhe06/ipdatabase ip解析 https://github.com/flyaction/ipdatabase 比较新 https://githu ...
- Django框架----Object Relational Mapping(ORM)
Django中的ORM Django项目使用MySQL数据库 1. 在Django项目的settings.py文件中,配置数据库连接信息: DATABASES = { "default&qu ...
- 给web项目整合富文本编辑器
给jsp页面整合富文本编辑器下载——删除多余的组件——加入到项目中——参照案例来完成整合步骤:1. 解压zip文件,将所有文件复制到Tomcat的webapps/kindeditor目录下. 2. 将 ...
- Piggy-Bank HDU - 1114
Before ACM can do anything, a budget must be prepared and the necessary financial support obtained. ...
- An Example of How Oracle Works
Oracle是怎么工作的,摘自Oracle 9i的官方文档 The following example describes the most basic level of operations tha ...
- Python3 Pandas的DataFrame格式数据写入excle文件、json、html、剪贴板、数据库
Python3 Pandas的DataFrame格式数据写入excle文件.json.html.剪贴板.数据库 一.DataFrame格式数据 Pandas是Python下一个开源数据分析的库,它提供 ...