欧几里得?x
可以去看dalao博客
1、欧几里得算法
带余除法定理:a,b∈Z,其中b>0,存在唯一q及r,使a=bq+r,其中0<=r<b;
辗转相除法(欧几里得算法)依据:(a,b)=(b,r)
C++实现:
递推
#include<iostream> using namespace std; int main()
{
int n,m,r;
cin>>m>>n;
r=m%n;
while(r!=)
{
m=n;
n=r;
r=m%n;
}
cout<<n;
}
递归
int gcd (int x,int y)
{
return y == ? gcd(y,x%y);
}
2.扩展欧几里得算法(裴蜀定理)
其中a,b是任意两个不全为0的整数,则存在两个整数x,y,使得ax+by=(a,b);
当(a,b)=1(互素)时,使ax+by=1;
应用:一次不定方程ax+by=c有解的充分条件是(a,b)|c;(|的意思是整除);
c++实现:
#include<iostream>
#include<cstdio>
#include<algorithm> using namespace std; long long exgcd(long long a,long long b,long long &x,long long &y)
{
if(b==)
{
x=;
y=;
return a;
}
long long r=exgcd(b,a%b,x,y),t=x;
x=y;y=t-y*(a/b);
return r;
} int main()
{
long long a1,b1,x1,y1;
cin>>a1>>b1;
exgcd(a1,b1,x1,y1);
while(x1<) x1+=b1;
cout<<x1;
return ;
}
应用:1、解不定方程ax+by=c
d=exgcd(a,b,x,y);
If(c%d==0)有解,否则无解。
x=c/d*x,y=c/d*y;
则x,y为原方程的一组解,且|x|+|y|的值最小。
其它的解为(x+k*b,y-k*a)
2、解线性同余方程
ax≡b(mod n)
也就是解不定方程ax-ny=b
3、解模的逆元
也就是解线性同余方程ax≡1(mod n).
欧几里得?x的更多相关文章
- NOIP2012拓展欧几里得
拉板题,,,不说话 我之前是不是说过数据结构很烦,,,我想收回,,,今天开始的数论还要恶心,一早上听得头都晕了 先来一发欧几里得拓展裸 #include <cstdio> void gcd ...
- Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C.Ray Tracing (模拟或扩展欧几里得)
http://codeforces.com/contest/724/problem/C 题目大意: 在一个n*m的盒子里,从(0,0)射出一条每秒位移为(1,1)的射线,遵从反射定律,给出k个点,求射 ...
- poj 1061 青蛙的约会 拓展欧几里得模板
// poj 1061 青蛙的约会 拓展欧几里得模板 // 注意进行exgcd时,保证a,b是正数,最后的答案如果是负数,要加上一个膜 #include <cstdio> #include ...
- 算法:欧几里得求最大公约数(python版)
#欧几里得求最大公约数 #!/usr/bin/env python #coding -*- utf:8 -*- #iteration def gcd(a,b): if b==0: return a e ...
- UVA 12169 Disgruntled Judge 枚举+扩展欧几里得
题目大意:有3个整数 x[1], a, b 满足递推式x[i]=(a*x[i-1]+b)mod 10001.由这个递推式计算出了长度为2T的数列,现在要求输入x[1],x[3],......x[2T- ...
- UVA 10090 Marbles 扩展欧几里得
来源:http://www.cnblogs.com/zxhl/p/5106678.html 大致题意:给你n个球,给你两种盒子.第一种盒子每个盒子c1美元,可以恰好装n1个球:第二种盒子每个盒子c2元 ...
- POJ 1061 青蛙的约会 扩展欧几里得
扩展欧几里得模板套一下就A了,不过要注意刚好整除的时候,代码中有注释 #include <iostream> #include <cstdio> #include <cs ...
- 欧几里得证明$\sqrt{2}$是无理数
选自<费马大定理:一个困惑了世间智者358年的谜>,有少许改动. 原译者:薛密 \(\sqrt{2}\)是无理数,即不能写成一个分数.欧几里得以反证法证明此结论.第一步是假定相反的事实是真 ...
- bzoj4517: [Sdoi2016]排列计数--数学+拓展欧几里得
这道题是数学题,由题目可知,m个稳定数的取法是Cnm 然后剩下n-m本书,由于编号为i的书不能放在i位置,因此其方法数应由错排公式决定,即D(n-m) 错排公式:D[i]=(i-1)*(D[i-1]+ ...
- POJ 2891 Strange Way to Express Integers(拓展欧几里得)
Description Elina is reading a book written by Rujia Liu, which introduces a strange way to express ...
随机推荐
- SAS学习笔记11 SAS宏
宏是一个被储存的文本,用一个名字识别它.最简单的宏就像一个宏变量一样工作,但复杂的宏可以完成许多宏变量不能做的事. 定义宏的语句格式为: %macro 宏名称: 宏文本 %mend <宏名称&g ...
- SQL查询oracle数据库最近备份情况
需求,查询RMAN备份情况,通过视图进行查询 SQL> //,) input_g, round(OUTPUT_BYTES///,) output_g order by ; SID OUTPUT_ ...
- Unity性能优化-遮挡剔除
1. Occlusion Culling-遮挡剔除的含义:没有在Camear视野范围内的游戏物体不进行渲染Render(默认情况下,Unity是会渲染所有GameObject,无论Camear是否看得 ...
- jvm类加载原理和类加载器介绍
虚拟机的类加载机制 在Class文件中描述的各种信息最终都需要加载到虚拟机中之后才能运行和使用. 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被 ...
- MVC,MVP 和 MVVM 的图示(原理)
一.MVC MVC模式的意思是,软件可以分成三个部分. 视图(View):用户界面. 控制器(Controller):业务逻辑 模型(Model):数据保存 各部分之间的通信方式如下. View 传送 ...
- form-create教程:自定义布局,实现一行多个组件
本文将介绍form-create如何自定义布局,实现一行多个组件 form-create 是一个可以通过 JSON 生成具有动态渲染.数据收集.验证和提交功能的表单生成器.并且支持生成任何 Vue 组 ...
- numpy相关使用
相关学习资料 : numpy中文网 https://www.numpy.org.cn/ 1 numpy索引区间为左闭右开,第一个索引能取到,第二个索引取不到 索引内可加步长 如 import nump ...
- stm32 rtc 实时时钟
STM32的实时时钟是一个独立的定时器 通常会在后备区域供电端加一个纽扣电池,当主电源没有电的时,RTC不会停止工作 若VDD电源有效,RTC可以触发秒中断.溢出中断和闹钟中断 备份寄存器BKP 备份 ...
- 装机篇:将ubuntu 14.04安装在移动硬盘中
这样做有诸多好处,最大的好处莫过于获得新鲜感. 需要注意的只有一点,要把bootloader装在整个硬盘的MBR而不是单独某个分区的DBR里. 另,我所成功的版本为14.04.1,之前使用14.04. ...
- javascript实现Html Table数据表分页
直接调用: <style type="text/css"> th { font-size:18px; ...