欧几里得定理与扩展欧几里得
3,欧几里德定理:(射影定理)
定理指出素数是无限的。
a*b*c+1要么是素数要么其质因子就是素数。
扩展欧几里得:
扩展欧几里得算法是欧几里得(又叫辗转相除法)的扩展。已知整数a、b,扩展欧几里得算法可以在求得a、b的最大公约数的同时,能找到整数x、y(其中一个很可能是负数),使它们满足
如何求出第一组最小整数解:如果c % gcd(a,b)!=0 那么没有最小整数解。
x = x1 * c/gcd(a,b), y = y1 * c/gcd(a,b)
然后你要判断整数解的话, 也是简单, 如果(x,y)是一组解, (x + b/gcd(a,b), y - a/gcd(a,b))也是一组解
(x - b/gcd(a,b), y + a / gcd(a,b))也是一组解
我们可以先求出x是正整数的一组解, 用取模既可
x = (x % b/gcd(a,b) + b/gcd(a,b)) % b/gcd(a,b) //这里保证x >= 0
y = (c - ax) / b, 这样的x已经是最接近0的数,于是不能在减少了
所以
如果y < 0, 那么无正整数解
如果y > 0有正整数解.
扩展欧几里得还可以求逆元,ax+by=1.则最小正整数x是b模a的逆元。
#include <iostream>
using namespace std;
int x,y,q;
int exgcd(int a,int b)
{if (b==0){x=1;y=0;q=a;return 0;}else{exgcd(b,a%b);int t=x;x=y;y=t-a/b*y;}return 0;
}
int main()
{int a,b;while (~scanf("%d%d",&a,&b)){if (a<b){a=a+b;b=a-b;a=a-b;}exgcd(a,b);printf("%d = %d * %d + %d * %d\n",q,x,a,y,b);}
}
用类似辗转相除法,求二元一次不定方程47x+30y=1的整数解。
- 47=30*1+17
- 30=17*1+13
- 17=13*1+4
- 13=4*3+1
然后把它们改写成“余数等于”的形式
- 17=47*1+30*(-1) //式1
- 13=30*1+17*(-1) //式2
- 4=17*1+13*(-1) //式3
- 1=13*1+4*(-3)
然后把它们“倒回去”
- 1=13*1+4*(-3) //应用式3
- 1=13*1+[17*1+13*(-1)]*(-3)
- 1=13*4+17*(-3) //应用式2
- 1=[30*1+17*(-1)]*4+17*(-3)
- 1=30*4+17*(-7) //应用式1
- 1=30*4+[47*1+30*(-1)]*(-7)
- 1=30*11+47*(-7)
得解x=-7, y=11。
计算
gcd(a, b).
若
gcd(a, b)
不能整除
n
,则方程无整数解;否则,在
方程的两边同除以
gcd(a, b)
欧几里得定理与扩展欧几里得相关推荐
- 欧几里得定理与扩展欧几里得定理
欧几里的定理(辗转相除法): gcd(a,b) = gcd(b,a%b) gcd(a,b)表示a,b的最大公约数 证明: 设 a > b c = a%b a = k * b + c (k为某个整 ...
- 关于欧几里得定理和拓展欧几里得定理的理解 续
前言 在我大一刚开始ACM的时候,写过一篇关于欧几里得定理理解的博客,这几天因为再次用到欧几里得定理,所以又转回去看了看,感觉自己以前写的不是很清楚,所以决定再写一篇关于欧几里得定理以及拓展欧几里得定 ...
- 欧几里得定理、扩展欧几里德定义及中国剩余定理(数列和一些数学方面的概念)
一. 欧几里得扩展:是欧几里得算法的扩展,已知整数a,b,扩展欧几里得算法可以 在求得a,b的最大公约数的同时,能找到整数x.y(其中一个可能为负数),使得他们满足贝祖等式 如果a是负数,可以将问题 ...
- 数学--数论--欧几里得定理和拓展欧几里得定理
欧几里得定理: gcd(a, b) = gcd(b, a%b) 证明: 我们首先约定:m = gcd(a,b) , n = gcd(b, q) , a = b*p +q.(这里的gcd含义跟上面一样, ...
- 欧几里得定理 及 拓展欧几里得 小结
[欧几里得定理] 定义: gcd ( a , b ) = gcd ( b , a m o d b ) \gcd(a,b)=\gcd(b,a\mod b) gcd(a,b)=gcd(b,a ...
- 欧几里得原理及扩展欧几里得原理(Euclidean Theory and Extended Euclidean Theory)学习笔记
题记:这是我第四次复习扩展欧几里得原理,因为不常用到,想要使用的时候又想不起细节,总是要查资料,于是索性这次整理一下欧几里得原理及其扩展原理存档至博客以备查用. 一.欧几里得原理 欧几里得原理(Euc ...
- 扩展欧几里得定理的证明和代码
1.欧几里得算法,gcd(a,b)为a b(a>b)的最大公约数,则gcd(a,b) = acd(b, a%b) 利用这个定理我们可以反复对ab模下去求得a和b的最大公约数 代码如下 int G ...
- 数论基础(1)扩展欧几里得定理
一.引言 扩欧在朴素欧几里得定理中扩展得到,主要用于解决什么问题? 1.求两个数的最大公约数(朴素欧也可以解决这个问题) 2.ax+by=gcd(a,b),求解这个线性不定方程的一组特解. (补充:贝 ...
- gcd + 扩展欧几里得定理+递推乘法逆元(模板)
gcd: int gcd(int a, int b){ return b==0? a: gcd(b, a%b); } 扩张欧几里得定理: 扩展欧几里德算法是用来在已知a, b求解一组x,y使得ax+b ...
最新文章
- leetcode 752. 打开转盘锁 c代码
- Linux mount挂载umount卸载
- boost::polygon模块实现多边形点相关的测试程序
- SAP Spartacus Page Layout学习笔记
- python初级进阶篇
- Hibernate之DetachedCriteria类详解
- OpenShift 4 - 用 Quay Operator 安装 Quay 环境(4.10 修正)
- Linux内核第六节 20135332武西垚
- linux脚本调用job,linux shell - 脚本中调用fg调取后台任务报错
- mysql数据库补充知识3 查询数据库记录信息之多表查询
- 高性能mysql 小查询_高性能MySQL06-查询优化(慢查询)
- PHP实现JS颜文字编码解码过程-aaencode+aadecode
- C#与Matlab混合编程中遇到的“MathWorks.MATLAB.NET.Arrays.MWNumericArray”的类型初始值设定项引发异常。
- PHP定义常量define和const的区别
- android 更换系统壁纸,Android使用线程更换壁纸
- MAX485芯片介绍(MAX485ESA+T,半双工RS422和RS485串口收发传输芯片,2.5Mbps传输速率。5V逻辑电平)
- supersu_如何使用SuperSU和TWRP扎根Android手机
- Python3 + Scrapy爬链家深圳成交房信息
- 建立网站费用大概需要多少钱?如何计算建立网站的成本?
- ear的英语怎么念_ear是什么意思_ear翻译_读音_用法_翻译