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 ...
随机推荐
- Android------------fragment数据传递
一.activity向fragment的数值之间的传递 关键点:fragment.setArguments(bundle);---->activity发出的信息 Bundle bund ...
- MySQL(外键变种)
day58 外键的变种 a. 用户表和部门表 用户: 不唯一 1 alex ...
- 对数组排序三种方式sort、asort与ksort
关联数组是 键值(key)=>值(value)形式. sort只对值进行排序,键值不参与排序: asort对值进行排序,键值参与排序: ksort对键值进行排序,值参与排序: 实例,比如数组: ...
- CSS3的三大特性
在学习CSS 的时候,我们必须要熟练和理解CSS 的三大特性,那么CSS 的三大特性又是什么呢? CSS 的三大特性:层叠 继承 优先级 ,CSS 三大特性是我们学习CSS 必须掌握的三个特性. 首 ...
- 《JAVA与模式》之不变模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述不变(Immutable)模式的: 一个对象的状态在对象被创建之后就不再变化,这就是所谓的不变模式. 不变模式的结构 不变模式可增强对象的 ...
- 【小程序云开发入门】quickStart
开发者可以使用云开发开发微信小程序.小游戏,无需搭建服务器,即可使用云端能力. 云开发为开发者提供完整的云端支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 API 进行核心业务开发,即可实现 ...
- CentOS7搭建FastDFS V5.11分布式文件系统-第一篇
1.绪论 最近要用到fastDFS,所以自己研究了一下,在搭建FastDFS的过程中遇到过很多的问题,为了能帮忙到以后搭建FastDFS的同学,少走弯路,与大家分享一下.FastDFS的作者淘宝资深架 ...
- OpenCV --- 修改图像的对比度、亮度 、RGB转Gray图像、修改图像的尺寸
#include <opencv2/core.hpp> #include <opencv2/imgcodecs.hpp> #include <opencv2/highgu ...
- Go语言学习笔记(2)——变量、常量
1. 变量(变量由字母.数字和下划线组成,且不能以数字开头!) 1.1 第一种 var name type // 未赋值时使用默认值 name = value 1.2 第二种: 根据所赋的值 ...
- Winform—C#读写config配置文件
现在FrameWork2.0以上使用的是:ConfigurationManager或WebConfigurationManager.并且AppSettings属性是只读的,并不支持修改属性值. 一.如 ...