HDU 2669 Romantic 扩展欧几里德---->解不定方程
Romantic
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2385 Accepted Submission(s): 944
The Birds is Fly in the Sky.
The Wind is Wonderful.
Blew Throw the Trees
Trees are Shaking, Leaves are Falling.
Lovers Walk passing, and so are You.
................................Write in English class by yifenfei

Girls are clever and bright. In HDU every girl like math. Every girl like to solve math problem!
Now tell you two nonnegative integer a and b. Find the nonnegative integer X and integer Y to satisfy X*a + Y*b = 1. If no such answer print "sorry" instead.
Each case two nonnegative integer a,b (0<a, b<=2^31)
(1)求解不定方程;
(2)求解模线性方程(线性同余方程);
(3)求解模的逆元;
这一道题目是第一种运用.
我们要求的是 (1). ax+by=c ,满足非负而且最小的x。
1. 要满足(1)有解,那么必须要满足 c%gcd(a,b)==0.为什么呢?
{ 对于gcd(a,b),我们可以知道 a%gcd(a,b)==b%gcd(a,b)==0;最大公约数的知识啊。
显然 (ax+bx) %gcd(a,b)==0 如果等式成立,左边和右边能够相等,那么c%gcd(a,b)==0.}
2.先把式子的左边提取出来得到 ax+by,根据欧几里德的知识可以写成 (2). ax+by=gcd(a,b);
那么就转化成先求 (2).
在扩展欧几里德的代码中,Ex_GCD(a,b,&x,&y);实际上已经求得了一组解。
他们分别是回溯得到的x,y; 为了区别,我们把它叫成x0,y0;
对于ax+by=gcd(a,b)的通解满足
x=x0+b/gcd(a,b)*t;
y=y0-a/gcd(a,b)*t; (t为任意整数)
这又是怎么得到的呢????
{ 由于ax+by=gcd(a,b) 等价于 a(x+b/gcd(a,b)*t) + b(y-a/gcd(a,b)*t)=gcd(a,b);}
3.知道了ax+by=gcd(a,b),那么对于ax+by=c,只要在(2)*c/gcd(a,b)。
原先的x0 转变成 x1=x0*c/gcd(a,b);
y1=y0*c/gcd(a,b);
ax+by=c的通解就可以写成
x=x1+b/gcd(a,b);
y=y1 -a/gcd(a,b);
4.要得到最小非负x的值.
更加x=x1+b/gcd(a,b); 那么满足 x=x%(b/gcd(a,b); while(x<0) x=x+b/gcd(a,b);
参考http://www.cnblogs.com/void/archive/2011/04/18/2020357.html
____________________________________________________________________________
步骤:
赋值k=Ex_GCD(a,b,x,y);也就是k=GCD(a,b);
1.判断 (c%d==0)? No or Yes
2.x=x*c/k;//因为ax+by=c 和 ax+by=gcd(a,b)的转化。
3.b=b/k; //同理
4.b=x%b; while(x<0) x=x+b;
5.根据ax+by=c ==> y= (c-ax)/b;
/*
扩展欧几里德模板题。 */ #include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std; __int64 Ex_GCD(__int64 a,__int64 b,__int64 &x,__int64 &y)//扩展欧几里得
{
if(b==)
{
x=;
y=;
return a;
}
__int64 g=Ex_GCD(b,a%b,x,y);
__int64 hxl;
hxl=x-(a/b)*y;
x=y;
y=hxl;
return g;
} int main()
{
__int64 a,b,k,x,y;
while(scanf("%I64d%I64d",&a,&b)>)
{
k=Ex_GCD(a,b,x,y);
if(k!=) //因为题目要求 X*a + Y*b = 1
{ //所以必须要满足 1 %GCD(a,b) ==0 才有解
printf("sorry\n");
continue;
}
x=x*/k;//由于c=1 而且k=1 ,所以没有必要这一步的。
//题目要求选择最小非负的x。
b=b/k;//这一步也没有必要了
x=x%b;
if(x<) x=x+b; //防止x为负数
y=(-a*x)/b; //这个根据 a*x+b*y=1 =>y=(1-a*x)/b;
printf("%I64d %I64d\n",x,y);
}
return ;
}
HDU 2669 Romantic 扩展欧几里德---->解不定方程的更多相关文章
- HDU 2669 Romantic(扩展欧几里德, 数学题)
题目 //第一眼看题目觉得好熟悉,但是还是没想起来//洪湖来写不出来去看了解题报告,发现是裸的 扩展欧几里得 - - /* //扩展欧几里得算法(求 ax+by=gcd )//返回d=gcd(a,b) ...
- HDU 2669 Romantic (扩展欧几里得定理)
Romantic Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- hdu 2669 Romantic 扩展欧几里得
Now tell you two nonnegative integer a and b. Find the nonnegative integer X and integer Y to satisf ...
- POJ 1061 青蛙的约会 扩展欧几里德--解不定方程
青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 81606 Accepted: 14116 Descripti ...
- HDU 2669 Romantic(扩展欧几里德)
题目链接:pid=2669">http://acm.hdu.edu.cn/showproblem.php?pid=2669 Problem Description The Sky is ...
- HDU 2669 Romantic【扩展欧几里德】
裸的扩展欧几里德,求最小的X,X=((X0%b)+b)%b,每个X都对应一个Y,代入原式求解可得 #include<stdio.h> #include<string.h> ty ...
- hdu 2669 Romantic
Romantic Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Sta ...
- HDU2669 Romantic 扩展欧几里德 对我来说有陷阱
这道题对我来说有陷阱虽说是赤果果的扩展欧几里德,看样子基本攻还是不够哈,基本功夫一定要好,准备每天上那种洗脑课时分 多看看数论书,弥补一下 自己 狗一样的基础, 这道题用到了一个性质: 对于不定整数 ...
- hdu 2669 Romantic (乘法逆元)
Romantic Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
随机推荐
- gdb的调试常用命令
一.gdb常用的命令 list l 常看源代码 break b 设置断点 b 10(行号) b ...
- 《Python黑帽子:黑客与渗透测试编程之道》 扩展Burp代理
下载jython,在Burpsuite的扩展中配置jython路径: Burp模糊测试: #!/usr/bin/python #coding=utf-8 # 导入三个类,其中IBurpExtender ...
- badboy录制网站出现css样式混乱,网页的图标点击没反应
本人在测试web工作过程中,遇到了标题一样的问题.苦恼很久也没有找到原因.后面自己摸索,发现了问题所在! badboy安装是2.2.5版本:ie最新版本: 原因:首次安装badboy的时候,所默认的浏 ...
- Servlet中相对路径与绝对路径
相对路径与绝对路径: 相对路径:相对路径指的是相对于当前文件所在目录的路径! http://localhost:8080/servlet01/ http://localhost:8080/servle ...
- angular.js的依赖注入解析
本教程使用AngularJS版本:1.5.3 angularjs GitHub: https://github.com/angular/angular.js/ Angula ...
- 解决axios请求本地的json文件在打包后路径出错问题
vue 项目中使用axios请求了本地项目的static文件夹下的json文件,使用npm run build 打包后,在Hbuilder编辑器打开,页面报错404: 在浏览器打开的路径 http:/ ...
- thuwc2019总结
275,是我的自己的估分 而350,是面试线 就发挥而言,这次的发挥相当糟糕,第一天选择全场打暴力而不打签到题正解,第二天因A题思路想偏造成2h额外时间花费.第二题与第三题之间,我选择了难打的第三题而 ...
- 【xsy1156】 树套树(tree) 倍增
题目大意:给你$m$棵由$n$个点构成的全等的树$A$.这$m$棵树之间有$m-1$条边相连,组成了一棵大树. 有$q$组询问,每次询问这棵大树上两点之间的距离. $n,m,q≤10^5$ 这是一道小 ...
- 页面按钮埋点+跟踪location.search
<a href="javascript: void(0)" onclick="setUrl('https://baoxian.pingan.com/pa18shop ...
- 剑指offer三十六之两个链表的第一个公共结点
一.题目 输入两个链表,找出它们的第一个公共结点. 二.思路 如果存在共同节点的话,那么从该节点,两个链表之后的元素都是相同的.也就是说两个链表从尾部往前到某个点,节点都是一样的.我们可以用两个栈分别 ...