exgcd拓展欧几里得
来源:互联网 发布:淘宝天天特价首页 编辑:程序博客网 时间:2024/06/08 00:56
最近在啃数学题……马上noip+半期考了文化课基本弃疗……
拓展欧几里得:计算gcd(a,b)同时计算ax+by=d的符合条件的x,y;
通常我们求gcd,在b!=0时进入下一个状态,即求gcd(b,a%b);exgcd也是一样,我们使bx’+(a%b)y’=d;
这两个状态间其实有联系
由a%b=a-(a/b)*b珂知
d=bx’+[a-(a/b)*b] *y’=bx’+ay’-(a/b)by’
=ay’+b(x’-(a/b)y’)
不会latex哭死……
由上知x=y’,y=x’-a/b*y;
代码如下
ll exgcd(ll a,ll b,ll &x,ll &y){ if(b==0){ x=1; y=0; return a; } ll ans=exgcd(b,a%b,x,y); ll temp=x; x=y; y=temp-a/b*y; return ans;}
exgcd例题:noip2012同余方程
描述
求关于x的同余方程ax ≡ 1 (mod b)的最小正整数解。
格式
输入格式
输入只有一行,包含两个正整数a, b,用一个空格隔开。
输出格式
输出只有一行,包含一个正整数x0,即最小正整数解。输入数据保证一定有解。
样例1
样例输入1
3 10
Copy
样例输出1
7
Copy
限制
每个测试点1s
提示
对于40%的数据,2 ≤b≤ 1,000;
对于60%的数据,2 ≤b≤ 50,000,000;
对于100%的数据,2 ≤a, b≤ 2,000,000,000。
来源
Noip2012提高组复赛Day2T1
#include<bits/stdc++.h>using namespace std;int exgcd(int a,int b,int &x,int &y){ if(b==0){ x=1; y=0; return a; } int r=exgcd(b,a%b,x,y); int t=x;x=y;y=t-a/b*y; return r;}int main(){ int a,b,x,y; cin>>a>>b; exgcd(a,b,x,y); if(x<1) x+=b;//注意x会小于0 cout<<x; return 0;}
阅读全文
0 0
- exgcd拓展欧几里得
- poj1061青蛙的约会(exgcd拓展欧几里得)
- java实现 拓展欧几里得算法 exgcd
- 扩展欧几里得定理 exgcd
- 扩展欧几里得(exgcd)
- 拓展欧几里得
- 拓展欧几里得
- 拓展欧几里得
- 拓展欧几里得
- 拓展欧几里得
- 拓展欧几里得
- 拓展欧几里得
- 拓展欧几里得
- 扩展欧几里得算法(exgcd)
- ACM_欧几里得(GCD) 扩展欧几里得(EXGCD)
- 欧几里得gcd+扩展欧几里得exgcd模板
- 欧几里得算法+拓展欧几里得算法
- 从欧几里得到拓展欧几里得
- 日常总结2
- 视频项目笔记(1)
- centos 配置SAN存储--IPSAN
- 深入理解ArrayList
- 解决分布式系统的一致性问题,我们需要了解哪些理论?
- exgcd拓展欧几里得
- PHP写一段代码,确保多个进程同时写入一个文件成功
- php中一个字符串和一个数字相加的规则是什么?
- 请教python3处理postgresql的copy语句的问题,on windows
- 哔哩哔哩-2017前端面试
- Nginx安装
- 聊聊TCP超时
- c语言练习(2)
- java的a星算法玩