五指山
|
Time Limit 1000ms
|
Memory Limit 65536K
|
|
description
|
西游记中孙吾空大闹天宫,如来佛祖前来降伏他,说道:“我与你打个赌赛;你若有本事,一筋斗打出我这右手掌中,算你赢,再不用动刀兵苦争战,就请玉帝到西方居住,把天宫让你;若不能打出手掌,你还下界为妖,再修几劫,却来争吵。”
那大圣闻言,暗笑道:“这如来十分好呆!我老孙一筋斗去十万八千里。他那手掌,方圆不满一尺,如何跳不出去?”急发声道:“既如此说,你可做得主张?”佛祖道:“做得!做得!”伸开右手,却似个荷叶大小。那大圣收了如意棒,抖擞神威,将身一纵,站在佛祖手心里,却道声:“我出去也!”你看他一路云光,无影无形去了。大圣行时,忽见有五根肉红柱子,撑着一股青气。他道:“此间乃尽头路了。这番回去,如来作证,灵霄殿定是我坐也。”翻转筋斗云,径回本处,站在如来掌:“我已去,今来了。你教玉帝让天宫与我。”
如来骂道:“你正好不曾离了我掌哩!”大圣道:“你是不知。我去到天尽头,见五根肉红柱,撑着一股青气,我留个记在那里,你敢和我同去看么?”如来道:“不消去,你只自低头看看。”那大圣睁圆火眼金睛,低头看时,原来佛祖右手中指写着“齐天大圣,到此一游。”大圣大吃了一惊道:“有这等事!有这等事!我将此字写在撑天柱子上,如何却在他手指上?莫非有个未卜先知的法术?我决不信!不信!等我再去来!”
好大圣,急纵身又要跳出,被佛祖翻掌一扑,把这猴王推出西天门外,将五指化作金、木、水、火、土五座联山,唤名“五行山”,轻轻的把他压住。
我们假设佛祖的手掌是一个圆圈(所以任凭大圣一个筋斗云十万八千里也是飞不出其手掌心),圆圈的长为n,逆时针记为:0,1,2,…,n-1,而大圣每次飞的距离为d.现在大圣所在的位置记为x,而大圣想去的地方在y。现在要你告诉大圣至少要多少筋斗云才能到达目的地。
|
input
|
有多组测试数据。
第一行是一个正整数T,表示测试数据的组数。
每组测试数据包括一行,四个非负整数,n(2 < n < 10^9),表示如来手掌圆圈的长度;d(0 < d < n),筋斗所能飞的距离;x(0 <= x < n),大圣的初始位置;y(0 <= y < n),大圣想去的地方。
注意孙悟空的筋斗云只沿着逆时针方向翻。
|
output
|
对于每组测试数据,输出一行,给出大圣最少要翻多少个筋斗云才能到达目的地。如果无论翻多少个筋斗云也不能到达,输出“Impossible”.
|
sample_input
|
2
3 2 0 2
3 2 0 1
|
sample_output
|
1
2
|
#include <iostream>
using namespace std;
typedef long long int64;
int64 ex_gcd(int64 a,int64 b, int64 & x, int64 & y){
if(b == 0){
x = 1;
y = 0;
return a;
}else{
int64 r = ex_gcd(b, a%b, x, y);
int64 t = x;
x = y;
y = t - a/b * y;
return r;
}
}
int64 gcd(int a,int b){
if(b==0)
return a;
return gcd(b, a%b);
}
int main() {
int64 k;
cin >> k;
int64 n,m,x,y;
while(k--){
cin >> n >> m >> x >> y;
int64 a = m;
int64 b = n;
int64 d = (y - x + n) % n; // ax + by = d
int64 X0,Y0;
int64 gcd = ex_gcd(a,b, X0, Y0);
cout << X0 << endl;
cout << gcd << endl;
int64 r = b / gcd;
if(d % gcd)
cout << "Impossible" << endl;
else
cout <<( d/ gcd * X0 % r + r) % r << endl;
}
return 0;
}
分享到:
相关推荐
欧几里德算法和扩展欧几里德算法,经典算法系列
欧几里德算法和扩展欧几里德算法.doc
欧几里德算法和扩展欧几里德算法--透彻理解 模P乘法逆元 对于整数a、p,如果存在整数b,满足a×b mod p =1,则说,b是a的模p乘法逆元。
就是扩展欧几里德算法
扩展欧几里德定理
RSA扩展欧几里德算法算例,说明RSA密钥计算过程.
扩展欧几里德算法 欧几里德算法 代码 不可多得的资源
acm 扩展欧几里德算法与中国剩余定理ppt教程 acmer教程系列 acm 扩展欧几里德算法与中国剩余定理ppt教程 acmer教程系列 很详细的讲解哦!
欧几里德算法和扩展欧几里德算法。用C和C++实现。.zip
扩展欧几里德问题,总结的课件,基本的内容都有了,由欧几里德引申到扩展欧几里德问题
实现扩展欧几里得算法的代码,很简单,能够成功运行。
个人初学C++,小试身手,供参考,网上有很多,我的是原创,但不是最好的
Matlab,扩展欧几里德算法,求模b条件下,a的乘法逆元,函数Eulid.m,直接调用传入参数就可以用,含参数使用注释。
两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们 很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为 止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的...
欧几里德算法 欧几里德算法 欧几里德算法 欧几里德算法欧几里德算法欧几里德算法欧几里德算法欧几里德算法欧几里德算法欧几里德算法欧几里德算法
扩展欧几里得算法求逆元
包含两个功能。 one 函数计算两个多项式 a(x) 和 b(x) 在 GF(2^m) 上... 另一个函数执行扩展的欧几里德算法,其中除了 a(x) 和 b(x) 的 gcd 之外,还计算了两个多项式 u(x) 和 v(x),使得 gcd = u(x)a(x) + v(x)b(x)。
欧几里德算法和扩展.doc
乘法逆元算法,扩展欧几里德,自己实现的,不过借鉴了网上的发达发达省份打发打发
介绍Pad6逼近的一般理论,通过引入扩展欧几里德算法给出对任何形式幂级数(n,m)阶Pade逼近的一种计算方法;还给出该方法求Pade逼近的一个应用实例.