gcd && exgcd算法
欧几里德算法与扩展欧几里德算法
1.欧几里德算法
#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b)
{
if(b==0)
return a;
else
return gcd(b,a%b);
}
//return b == 0 ? a : gcd(b, a % b);
int main()
{
int m,n;
while(cin>>m>>n)
cout<<gcd(m,n)<<endl;
return 0;
}
2.扩展欧几里德算法
扩展欧几里德算法顾名思义,是基于欧几里德算法之上的,可以用于求解很多数学问题,下面以计算所有 ax+by=c 符合要求的整数解为例:
#include<bits/stdc++.h>
using namespace std;
int a,b,c,x,y;
int exgcd(int a,int b,int &x,int &y)
{
if(!b){
x=1;y=0;return a;
}
int e=exgcd(b,a%b,x,y);
int temp=x;x=y;y=temp-a/b*y;
return e;
}
int main()
{
scanf("%d%d%d",&a,&b,&c);
int k=exgcd(a,b,x,y); //exgcd返回最大公约数
if(c%k) cout<<"Impossible"<<endl;
else{
x*=c/k;y*=c/k;
cout<<"x="<<x<<",y="<<y<<endl; //ax+by=c的一组解
}
return 0;
}
/*最小正整数解:
a(x+db) + b(y-da) = c;其中:d=1/k,所以最小正整数解x是:
x*=c/k;t=b/k;则x=(x%t+t)%t;
求出最小x,其对应的y就是(c-a*x)/b。
最小正y也一样;
*/
gcd && exgcd算法的更多相关文章
- Gcd&Exgcd算法学习小记
Preface 对于许多数论问题,都需要涉及到Gcd,求解Gcd,常常使用欧几里得算法,以前也只是背下来,没有真正了解并证明过. 对于许多求解问题,可以列出贝祖方程:ax+by=Gcd(a,b),用E ...
- 最大公约数(gcd):Euclid算法证明
1个常识: 如果 a≥b 并且 b≤a,那么 a=b. 2个前提: 1)只在非负整数范围内讨论两个数 m 和 n 的最大公约数,即 m, n ∈ N. 2)0可以被任何数整除,但是0不能整除任何数,即 ...
- gcd&&exgcd&&斐蜀定理
gcd就是求a和b最大公约数,一般方法就是递推.不多说,上代码. 一.迭代法 int gcd(int m, int n) { ) { int c = n % m; n = m; m = c; } re ...
- 读入 并查集 gcd/exgcd 高精度 快速幂
ios_base::sync_with_stdio(); cin.tie(); ], nxt[MAXM << ], Head[MAXN], ed = ; inline void added ...
- 【数论】如何证明gcd/exgcd
我恨数论 因为打这篇的时候以为a|b是a是b的倍数,但是懒得改了,索性定义 a|b 为 a是b的倍数 咳咳,那么进入正题,如何证明gcd,也就是 gcd(a,b) = gcd(b,a%b)? 首先,设 ...
- Gcd&Exgcd
欧几里得算法: \[gcd(a,b)=gcd(b,a\bmod b)\] 证明: 显然(大雾) 扩展欧几里得及证明: 为解决一个形如 \[ax+by=c\] 的方程. 根据裴蜀定理,当且仅当 \[gc ...
- 约数,gcd,exgcd.
很多题都是要求出什么最大公约数或者最小公倍数什么的,也有一些题目是和约数个数有关的,所以需要总结一下. 首先最大公约数和最小公倍数怎么求呢? 当然是观察法了,对于一些很聪明的孩纸他们一般随便一看就秒出 ...
- gcd, exgcd的证明
- 数论入门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 ...
随机推荐
- 包、logging模块、hashlib模块、openpyxl模块、深浅拷贝
包.logging模块.hashlib模块.openpyxl模块.深浅拷贝 一.包 1.模块与包 模块的三种来源: 1.内置的 2.第三方的 3.自定义的 模块的四种表现形式: 1.py文件 2.共享 ...
- 吴裕雄 python 人工智能——智能医疗系统后台用户复诊模块简约版代码展示
#复诊 import sys import os import time import operator import cx_Oracle import numpy as np import pand ...
- SQL表名,应该用表对应资源对象的复数形式还是单数形式
原文:http://blog.csdn.net/lizeyang 问题 SQL表名,应该用表对应资源对象的复数形式还是单数形式.例如一个用户表,表名是用user还是users更合适呢? 精华回答 ...
- python中的分号(“;”)
在C.Java等语言的语法中规定,必须以分号作为语句结束的标识.Python也支持分号,同样用于一条语句的结束标识.但在Python中分号的作用已经不像C.Java中那么重要了,Python中的分号可 ...
- set的使用-Hdu 2094
产生冠军 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- php redis 集群扩展类文件
<?php /** * redis集群驱动 */ namespace Common\Api; class RedisCluster{ protected $servers=array( '192 ...
- Python - for循环的本质,迭代器,可迭代对象
参考 https://foofish.net/how-for-works-in-python.html for循环可以迭代一个可迭代(iterable)的对象 原理 生成这个可迭代对象(实现了__it ...
- <img>标签显示本地路径的图片的.NET解决方案
今天朋友问了我一个奇怪的需求:项目中要求图片上传到工作目录,上传后要在网页中通过<img>显示出来.图片上传后显示,在开发中常见的做法是将它图片上传到网站目录下(upload/),如果保存 ...
- WordPress 网站迁移
最近想把本地的WordPress迁移到我的Linux虚拟机里面,是不是很无聊,哈哈哈,接下来就是一过程了,其实这个和迁移到线上是一样的, 1.首先将本地的文件WordPress通过FTP传到虚拟机上: ...
- 一个含有Zeta函数的级数
\[\Large\sum_{k=1}^{\infty}\frac{(2^{2k-1}-2)(4^{2k+1}-3^{2k+1})}{144^k\,k\,(2k+1)}\zeta(2k)\] \(\La ...