Romantic

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2385    Accepted Submission(s): 944

Problem Description
The Sky is Sprite.
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.

 
Input
The input contains multiple test cases.
Each case two nonnegative integer a,b (0<a, b<=2^31)
 
Output
output nonnegative integer X and integer Y, if there are more answers than the X smaller one will be choosed. If no answer put "sorry" instead.
 
Sample Input
77 51 10 44 34 79
 
Sample Output
2 -3 sorry 7 -3
 
Author
yifenfei
 
Source
 
Recommend
 
扩展欧几里德有很多用处,搜索了一些,大致三种:

(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 扩展欧几里德---->解不定方程的更多相关文章

  1. HDU 2669 Romantic(扩展欧几里德, 数学题)

    题目 //第一眼看题目觉得好熟悉,但是还是没想起来//洪湖来写不出来去看了解题报告,发现是裸的 扩展欧几里得 - - /* //扩展欧几里得算法(求 ax+by=gcd )//返回d=gcd(a,b) ...

  2. HDU 2669 Romantic (扩展欧几里得定理)

    Romantic Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  3. hdu 2669 Romantic 扩展欧几里得

    Now tell you two nonnegative integer a and b. Find the nonnegative integer X and integer Y to satisf ...

  4. POJ 1061 青蛙的约会 扩展欧几里德--解不定方程

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 81606   Accepted: 14116 Descripti ...

  5. HDU 2669 Romantic(扩展欧几里德)

    题目链接:pid=2669">http://acm.hdu.edu.cn/showproblem.php?pid=2669 Problem Description The Sky is ...

  6. HDU 2669 Romantic【扩展欧几里德】

    裸的扩展欧几里德,求最小的X,X=((X0%b)+b)%b,每个X都对应一个Y,代入原式求解可得 #include<stdio.h> #include<string.h> ty ...

  7. hdu 2669 Romantic

    Romantic Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Sta ...

  8. HDU2669 Romantic 扩展欧几里德 对我来说有陷阱

    这道题对我来说有陷阱虽说是赤果果的扩展欧几里德,看样子基本攻还是不够哈,基本功夫一定要好,准备每天上那种洗脑课时分  多看看数论书,弥补一下 自己 狗一样的基础, 这道题用到了一个性质: 对于不定整数 ...

  9. hdu 2669 Romantic (乘法逆元)

    Romantic Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

随机推荐

  1. JavaScript基础流程控制(3)

    day51 参考:https://www.cnblogs.com/liwenzhou/p/8004649.html for循环 while循环 三元运算 a>b条件成立,选a,不成立选b

  2. java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext

    spring的项目中有时候会报错:java.lang.IllegalStateException: BeanFactory not initialized or already closed - ca ...

  3. 在Linux CentOS上部署Asp.Net Core项目(Tengine、Asp.Net Core、Centos、MySql)

    一.前言 1.简单记录一下Linux CentOS 7中安装与配置Tengine的详细步骤. 2.简单比较一下Tengine 和Nginx 3.搭建Asp.net Core和部署 Web程序 4.总结 ...

  4. php7 改为从栈上分配内在的思路

    php7的特点是规则上不从堆上分配内存,改为从栈上分配内存, 因为有些场景是从堆上分配内在后,还要手动释放内存,利用栈分配内在快的特点,在有需要的时候,再在堆上分配内在 但是栈上分配的内存,不能返回, ...

  5. POJ 2379

    #include <iostream> #include <algorithm> #define MAXN 1005 using namespace std; struct n ...

  6. mysql 执行 sql 语句提示Parameter '@XXX' must be defined

    执行 sql 语句 MySqlException: Parameter '@maxNo' must be defined. 执行 sql 中含有自定义变量 @maxNo,抛出异常 解决方法: 连接字符 ...

  7. docker registry push错误“server gave HTTP response to HTTPS client”

    系统环境:centos7 docker版本: 1.12.3(注意版本,可能存在不同版本设置不同的情况) docker registry版本:2.4.1 问题: 成功安装docker registry, ...

  8. .NET源码Stack<T>和Queue<T>的实现

    这阵子在重温数据结构的时候,顺便用ILSpy看了一些.NET类库的实现,发现一些基本的数据结构的实现方法也是挺有意思的,所以这里拿出来跟大家分享一下.这篇文章讨论的是Stack和Queue的泛型实现. ...

  9. 搭建互联网架构学习--004--centos安装Mysql

    Mysql安装 1. yum安装mysql yum -y install mysql-server 2. 启动mysql服务 启动mysql:service mysqld start 查看mysql的 ...

  10. Android 开发工具类 10_Toast 统一管理类

    Toast 统一管理类: 1.短时间显示Toast: 2.长时间显示 Toast: 3.自定义显示 Toast 时间. import android.content.Context; import a ...