nyoj 扩展欧几里德入门
2016-05-26 15:06
190 查看
点击打开链接http://acm.nyist.net/JudgeOnline/problem.php?pid=775
百度有证明
求解 x,y的方法的理解
设 a>b。
1,显然当 b=0,gcd(a,b)=a。此时 x=1,y=0;
2,a>b>0 时
设 ax1+ by1= gcd(a,b);
bx2+ (a mod b)y2= gcd(b,a mod b);
根据朴素的欧几里德原理有 gcd(a,b) = gcd(b,a mod b);
则:ax1+ by1= bx2+
(a mod b)y2;
即:ax1+ by1= bx2+
(a - [a / b] * b)y2=ay2+ bx2-
[a / b] * by2;
也就是ax1+ by1 == ay2+ b(x2-
[a / b] *y2);
根据恒等定理得:x1=y2; y1=x2-
[a / b] *y2;
这样我们就得到了求解 x1,y1 的方法:x1,y1 的值基于
x2,y2.
上面的思想是以递归定义的,因为 gcd 不断的递归求解一定会有个时候 b=0,所以递归可以结束。
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
long s,t;
void exgcd(long a,long b)
{
if(b==0)
{
s=1;t=0;
}
else
{
exgcd(b,a%b);
long tmp;
tmp=s; s=t; t=tmp-a/b*t;
}
}
int main()
{
long a,b;
while(scanf("%ld%ld",&a,&b)!=EOF)
{
exgcd(a,b);
printf("%ld %ld\n",s,t);
}
return 0;
}
百度有证明
求解 x,y的方法的理解
设 a>b。
1,显然当 b=0,gcd(a,b)=a。此时 x=1,y=0;
2,a>b>0 时
设 ax1+ by1= gcd(a,b);
bx2+ (a mod b)y2= gcd(b,a mod b);
根据朴素的欧几里德原理有 gcd(a,b) = gcd(b,a mod b);
则:ax1+ by1= bx2+
(a mod b)y2;
即:ax1+ by1= bx2+
(a - [a / b] * b)y2=ay2+ bx2-
[a / b] * by2;
也就是ax1+ by1 == ay2+ b(x2-
[a / b] *y2);
根据恒等定理得:x1=y2; y1=x2-
[a / b] *y2;
这样我们就得到了求解 x1,y1 的方法:x1,y1 的值基于
x2,y2.
上面的思想是以递归定义的,因为 gcd 不断的递归求解一定会有个时候 b=0,所以递归可以结束。
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
long s,t;
void exgcd(long a,long b)
{
if(b==0)
{
s=1;t=0;
}
else
{
exgcd(b,a%b);
long tmp;
tmp=s; s=t; t=tmp-a/b*t;
}
}
int main()
{
long a,b;
while(scanf("%ld%ld",&a,&b)!=EOF)
{
exgcd(a,b);
printf("%ld %ld\n",s,t);
}
return 0;
}
相关文章推荐
- DB Version Control Tool "Flyway" note.
- 《JAVA语言程序设计》(五)保留两位小数的操作
- const char*转LPCWSTR的方法记录
- iOS 应用将适应新的的IPv6-only网络 -解决方案
- 基于springMVC+shiro+Mybaits+ehcache缓存+Easyui的权限系统框架
- Hibernate检索策略
- JAVA IO流的基本认识
- acm c++ 练习中出现的错误类型
- 连接器脚本格式注意
- 【LeetCode】102. Binary Tree Level Order Traversal 解题报告
- python【6】-函数式编程
- Hibernate中的Entity类的乐观锁配置
- Toolbar 使用
- SQlite数据库简介和简单操作
- 目前最全的获取IMSI方法
- JavaScript的String字符串对象常用操作总结
- calltree的安装
- 【lr】Loadrunner11无法启动IE的解决办法
- iOS 各种传值方式
- centos下安装mysql5.7.5的rpm包