hdu2669Romantic (扩展欧几里德)
来源:互联网 发布:淘宝付款人数和月销量 编辑:程序博客网 时间:2024/04/27 20:42
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.
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)
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 5110 4434 79
Sample Output
2 -3sorry7 -3题意:给你两个数a,b,让你找到一个非负的整数x和一个整数y,使得ax+by=1,如果有多种情况,x要取最小的。ps:图还是挺好看的(笑)
思路:这是普通的欧几里德模板题,其中要使得x最小,那么先把特解x0求出来,那么最小的x就是(x0%b+b)%b.
#include<iostream>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<vector>#include<map>#include<set>#include<queue>#include<stack>#include<string>#include<algorithm>using namespace std;typedef long long ll;typedef long double ldb;#define inf 99999999#define pi acos(-1.0)ll extend_gcd(ll a,ll b,ll &x,ll &y){ if(b==0){ x=1;y=0;return a; } ll d=extend_gcd(b,a%b,y,x); y-=a/b*x; return d;}ll niyuan(ll a,ll n){ ll x,y; ll d=extend_gcd(a,n,x,y); if(d==1) return (x%n+n)%n; else return -1;}ll gcd(ll a,ll b){ return b ? gcd(b,a%b) : a;}int main(){ ll n,m,b,d,a,x,y; while(scanf("%lld%lld",&a,&b)!=EOF) { if(gcd(a,b)!=1){ printf("sorry\n");continue; } d=extend_gcd(a,b,x,y); ll x1; x1=(x%b+b)%b; ll t=(x1-x)/b; printf("%lld %lld\n",x1,y-a*t); } return 0;}
0 0
- hdu2669Romantic (扩展欧几里德)
- hdu2669Romantic
- 欧几里德和扩展欧几里德
- 欧几里德, 与 扩展欧几里德
- 欧几里德|扩展欧几里德
- 欧几里德&&扩展欧几里德详解
- 欧几里德&&扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德!!!!!
- 扩展欧几里德
- 窥探 Swift 编程之错误处理与异常抛出
- Codeforces #305 C. Mike and Frog 数论
- UIApplicationMain函数
- ZOJ Problem Set - 2773 Triangular Sums【公式】
- chromebook or hackbook?
- hdu2669Romantic (扩展欧几里德)
- 23种设计模式
- linux 安装php扩展记录
- 视觉SLAM漫谈(二):图优化理论与g2o的使用
- 小李子莱昂纳多的9部高分电影大推荐!
- .gitignore 配置文件的写法
- dd if 增加swap
- 【bzoj2111】[ZJOI2010]Perm 排列计数
- javascript apply 与call用法