hdu 2669 Romantic扩展欧几里得(模板题)
Posted 00isok
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 2669 Romantic扩展欧几里得(模板题)相关的知识,希望对你有一定的参考价值。
<题目链接>
题目大意:
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.
#include<cstdio> using namespace std; int exgcd(int a,int b,int &x,int &y) { if(b==0) { x=1; y=0; return a; } int r=exgcd(b,a%b,x,y); int t=x; x=y; y=t-a/b*y; return r; } int main() { int a,b,x,y,m; while(scanf("%d%d",&a,&b)!=EOF) { m=exgcd(a,b,x,y); if(m==1) //因为题目要求gcd(a,b)要为1 { while(x<0) //exgcd求出的x,y是通解,由于题目说了,x要求非负,所以这里要对x,y的值做一些调整,但是为什么是x+=b,y-=a啊? { //而且,如果x由exgcd一开始求出来的就是正数,怎么保证这个x是符合条件的非负整数中的最小值呢? x+=b; y-=a; } printf("%d %d ",x,y); } else printf("sorry "); } return 0; }
2018-08-12
以上是关于hdu 2669 Romantic扩展欧几里得(模板题)的主要内容,如果未能解决你的问题,请参考以下文章