Uva10090 Marbles 扩展欧几里德的应用
2013-12-08 19:18
405 查看
好几天没有做题目了,因为心情不好导致刷题没动力,现在感觉还可以,继续数论的路,为了回顾一下扩展欧几里德所以做了一下这个题目, 根据题目意思 很容易找到方程 n1*x0+n2*y0=n,求解,我们都知道扩展欧几里德求出的x0,y0事实上是有通解的,
x0*n1+y0*n2=gcd(n1,n2)的通解,
x = x0 + n2/Gcd(n1, n2) * t
y = y0 - n1/Gcd(n1, n2) * t(其中t为任意整数)
方程 x0*n1+y0*n2=n的通解
x= x1 +
n2/Gcd(n1,n2)
* t
y = y1 -
n1/Gcd(n1,n2)
* t(其中t为任意整数)
因为x0,y0都是要大于等于0的,所以我们可以找到t的范围,由此变简单了
x0*n1+y0*n2=gcd(n1,n2)的通解,
x = x0 + n2/Gcd(n1, n2) * t
y = y0 - n1/Gcd(n1, n2) * t(其中t为任意整数)
方程 x0*n1+y0*n2=n的通解
x= x1 +
n2/Gcd(n1,n2)
* t
y = y1 -
n1/Gcd(n1,n2)
* t(其中t为任意整数)
因为x0,y0都是要大于等于0的,所以我们可以找到t的范围,由此变简单了
#include<iostream> #include<cstdio> #include<list> #include<algorithm> #include<cstring> #include<string> #include<queue> #include<stack> #include<map> #include<vector> #include<cmath> #include<memory.h> #include<set> #define ll long long #define eps 1e-8 #define inf 0xfffffff const ll INF = 1ll<<61; using namespace std; //vector<pair<int,int> > G; //typedef pair<int,int> P; //vector<pair<int,int>> ::iterator iter; // //map<ll,int>mp; //map<ll,int>::iterator p; // ll exgcd(ll a,ll &x,ll b,ll &y) { if(b==0) { x=1; y=0; return a; } ll r=exgcd(b,x,a%b,y); ll t=x; x=y; y=t-a/b*y; return r; } int main() { ll n,c1,n1,c2,n2; while(scanf("%lld",&n),n) { scanf("%lld %lld",&c1,&n1); scanf("%lld %lld",&c2,&n2); ll x0,y0; ll gcd=exgcd(n1,x0,n2,y0); if(n%gcd!=0) puts("failed"); else { x0=x0*n/gcd; y0=y0*n/gcd; ll ans1,ans2; n1=n1/gcd; n2=n2/gcd; if(n2*c1 >= n1*c2) { ll t=-x0/n2; if(x0%n2!=0 && x0<0) t++; ans1=x0+t*n2; ans2=y0-t*n1; } else { ll t=y0/n1; if(y0%n1!=0 && y0<0) t--; ans1=x0+t*n2; ans2=y0-t*n1; } if(ans1 < 0 || ans2 < 0) puts("failed"); else printf("%lld %lld\n",ans1,ans2); } } }
相关文章推荐
- UVA10413 Crazy Savages 扩展欧几里德的应用
- UVA 10673 Play with Floor and Ceil (扩展欧几里德)
- UVALive 6428 A+B // 扩展欧几里德
- poj2115 Looooops 扩展欧几里德的应用
- UVALive 6428 A+B 扩展欧几里德
- NEFU84 五指山扩展欧几里德的应用
- 扩展欧几里得应用解不定方程(uva12169,Disgruntled Judge,NWERC 2008)
- poj2142 The Balance 扩展欧几里德的应用 稍微还是有点难度的
- UVA 12493 Stars(扩展欧几里德+欧拉函数)
- poj2115 Looooops 扩展欧几里德的应用
- poj1061 青蛙的约会 扩展欧几里德的应用
- uva 10104 Euclid Problem (数论-扩展欧几里德)
- 并查集扩展应用(好)uva12232
- poj2891 Strange Way to Express Integers 扩展欧几里德的应用
- poj1061 青蛙的约会 扩展欧几里德的应用
- uva 10104 Euclid Problem (数论-扩展欧几里德)
- uva 12169 扩展欧几里德解不定方程
- UVA11426 GCD - Extreme (II) 欧拉函数`扩展欧几里德应用
- 扩展欧几里德应用 poj 1061
- HDU 1222 Wolf and Rabbit (扩展欧几里德应用)