最大公因数数gcd模板
首先蒟蒻是在大佬的博客里学习的代码,代码风格多有相似之处,大佬博客https://www.cnblogs.com/lMonster81/p/10433902.html
最大公因数那,顾名思义就是两个数共有的因数里最大的那个,辗转相除求最大公因数所用的原理就是两个数的最大公因数等于这两个数中【较小的那个数】和【两数之差】的最大公因数,证明如下:
描述:关于辗转相除法的具体实现在这里就不具体说明了,本文要记录的是辗转相除法应用于求最大公约数的算法证明过程。 假设: 求m和n的最大公约数。
a,b分别是m除以n的商和余数,即m=na+b。
gcd(m,n)表示m和n的最大公约数。
求证:gcd(m,n)=gcd(n,b) 证明: 设c=gcd(m,n), d=gcd(n,b) 1. ∵c为m和n的公约数 ∴m能被c整除,n也能被c整除 ∴na也能被c整除 参照推论一 ∴m-na也能被c整除(即b能c整除) 参照推论二 ∴c为n和b的公约数 ∵d为n和b的最大公约数 ∴c≤d 2. 同理可证 d≤c ∵d为n和b的公约数 ∴n能被d整除,b也能被d整除 ∴na也能被d整除 参照推论一 ∴na+b也能被d整除(即m能d整除) 参照推论二 ∴d为m和n的公约数 ∵c为m和n的最大公约数 ∴d≤c 综上所述:c=d,即gcd(m,n)=gcd(n,r) 推论一:若a能被b整除(a=tb),则如果k为正整数,则ka也能被b整除(ka=ktb)。 推论二:若a能被c整除,b也能被c整除,则(a±b)也能被c整除。
以上证明转载自:https://www.cnblogs.com/zwffff/archive/2010/08/25/1808178.html
代码:
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int a,b;
int gcd(int x,int y)
{
int Max=max(x,y),Min=min(x,y);
return Max%Min==?Min:gcd(Max,Max%Min);
}
int main()
{
cin>>a>>b;
int c=gcd(a,b);
cout<<c;
return ;
}
关于最大公因数与最小公倍数的其他几个知识:
1,:最大公因数与最小公倍数的乘积等于原两个数的乘积。
最大公因数数gcd模板的更多相关文章
- gcd 模板
声明 给 x,y 两个数,求 x,y 的最大公因数. 辗转相除法,直接套!!! function gcd(x,y:longint):longint; begin then exit(x) else e ...
- SPOJ - DQUERY 主席树求区间有多少个不同的数(模板)
D-query Time Limit: 227MS Memory Limit: 1572864KB 64bit IO Format: %lld & %llu Submit Status ...
- HDU 1134 Game of Connections(卡特兰数+大数模板)
题目代号:HDU 1134 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1134 Game of Connections Time Limit: 20 ...
- [NOIP2019模拟赛]数数(gcd)
题目大意: 求l~r中有多少数与x互质,带单点修改 分析: 两个30的部分分很好打: ·n<=1000暴力O(nq)就好了 ·$a_i<=100$用树状数组维护每个x的前缀和就好了 100 ...
- xudyh的gcd模板
hdu 5019 #include <cstdlib> #include <cctype> #include <cstring> #include <cstd ...
- hdu3191+hdu1688(求最短路和次短路条数,模板)
hdu3191题意:求出次短路的长度和条数 #include<iostream> #include<cstdio> #include<cstring> #inclu ...
- gcd模板(欧几里得与扩展欧几里得、拓展欧几里得求逆元)
gcd(欧几里得算法辗转相除法): gcd ( a , b )= d : 即 d = gcd ( a , b ) = gcd ( b , a mod b ):以此式进行递归即可. 之前一直愚蠢地以为辗 ...
- 最大公约数(gcd模板)
int gcd(int a,int b) { ) { int t=a%b; a=b; b=t; } return a; }
- caioj 1204 Catalan数(模板)
题目中对卡特兰数的总结很不错 以下copy自题目 Catalan数列:1,1,2,5,14,42,(前面几个要背) 即 h(0)=1,h(1)=1,h(2)=2,h(3)=5...公式:h(n)=C( ...
随机推荐
- HTML基础:用表单写一个简易登录页面
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- demo board boot mode
demo扩展板 QSPI0_IO0_MIO2--A13--PS-MIO2 QSPI0_IO0_MIO3--A14--PS-MIO3 QSPI0_IO0_MIO4--B11--PS-MIO4 QSPI0 ...
- selenium原理(以百度搜索为例)
1.首先导入 Selenium(webdriver)相关模块2.调用 Selenium 的浏览器驱动,获取浏览器句柄(driver)并启动浏览器.3.通过句柄访问百度 URL.4.通过句柄操作页面元素 ...
- bzoj 1001 原图最小割转化为对偶图最短路
题目大意: 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形 ...
- SQL的各种连接--自联结,内连接,外连接,交叉连接
1.准备两个表:Student,Course,其中student.C_S_Id=Course.C_Id(即Student 表中的 C_S_Id 字段为外键列,关联的是 Course 表的 C_Id 主 ...
- jquery自带的排序方法(js也是)
jquery.sort() js.sort() <!DOCTYPE html> <html> <head> <meta charset=&qu ...
- C# 枚举的声名和使用
namespace xxxxxx { public enum EnumTextHAlign { Left = , Center = , Right = } } using xxxxxx;
- 【Flutter学习】基本组件之弹窗和提示(SnackBar、BottomSheet、Dialog)
一,概述 Flutter中的操作提示主要有这么几种 SnackBar.BottomSheet.Dialog,因为 Dialog样式比较多,放最后讲好了 二,介绍 SnackBar SnackBar的源 ...
- [CSP-S模拟测试]:联(小清新线段树)
题目描述 由于出题人懒所以没有背景.一个无限长的$01$序列,初始全为$0$,每次选择一个区间$[l,r]$进行操作,有三种操作:$\bullet 1\ l\ r$将$[l,r]$中所有元素变成$1$ ...
- GH001 on github
remote: warning: GH001: Large files detected. You may want to try Git Large File Storage - https://g ...