D - C Looooops POJ - 2115 欧几里德拓展
题意:就是看看for(; ;)多久停止. 最让我蛋疼的是1L和1LL的区别!让我足足wa了12发!
1L 是long类型的, 1LL为long long类型的!
思路:
这就是欧几里德扩展的标准式子了。
ac代码:
#include<cstdio> using namespace std; #define ll long long void exgcd(ll a, ll b, ll &d,ll &x, ll &y) { if (!b){ d = a; x = 1; y = 0; } else{ exgcd(b, a%b, d, y, x); y -= x*(a / b); } } int main() { ll a, b, c, k; while (scanf("%lld%lld%lld%lld", &a, &b, &c, &k)!=EOF&&(a + b + c + k)) { ll C = b - a , A=c, B=1LL<<k; ll x, y, d; exgcd(A, B, d, x, y); if (C%d){ printf("FOREVER\n"); } else { B/=d; C/=d; printf("%lld\n", (x%B*C%B+B)%B); } } }