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.
Each case two nonnegative integer a,b (0<a, b<=2^31)
77 51 10 44 34 79
2 -3 sorry 7 -3
这篇文章的目的 倒不是以解决问题为主,模版问题。
分析问题 ;
77 *2 - 3*51=1
gcd(10,44)!=1
34 *7 - 3*79=1
分析案例,大致思路就知道了;
要求的是扩展欧几米得的问题,接下来就是模版问题了;
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b)
{
return a%b==0?b:gcd(b,a%b);
}
void exGcd(ll a,ll b,ll &x,ll &y)
{
if(b==0)
{
x=1;y=0;
return;
}
exGcd(b,a%b,y,x);
y-=a/b*x;
}
int main()
{
ll a,b;
while(cin>>a>>b)
{
ll d,e;
if(gcd(a,b)!=1) printf("sorry\n");
else
{
ll x,y;
exGcd(a,b,x,y);
while(x<=0)
{
x+=b;
y-=a;
}
printf("%lld %lld\n",x,y);
}
}
return 0;
}
我个人认为不一定要理解他的思路,而是要学会利用模版。