1 条题解
-
0
C :
#include <stdio.h> #include <math.h> int main() { long a, b, c, d; int k; while (scanf("%ld %ld %ld %ld", &a, &b, &c, &k), a || b || c || k) { d = b - a; if (d < 0) { d += powf(2, k); } if (d %c) { printf("FOREVER\n"); } else { printf("%d\n", d/c); } } return 0; }
C++ :
#include <iostream> using namespace std; typedef long long int64; int64 mod(int64 a, int64 b){ if (a < 0) return a % b + b; return a % b; } int64 ex_gcd(int64 a, int64 b, int64 &x, int64 &y){ if (b == 0){ x = 1; y = 0; return a; }else{ int64 d = ex_gcd(b, a % b, x, y); int64 temp = x; x = y; y = (temp - a / b * y); return d; } } int main(){ int64 a, b, c, k, A, B, C, x, y; while(cin>>a>>b>>c>>k, a || b || c || k){ A = c; B = ((int64)1) << k; C = (b - a + B) % B; if (c == 0){ if (C == 0) cout<<"0"<<endl; else cout<<"FOREVER"<<endl; continue; } int64 d = ex_gcd(A, B, x, y); if (C % d) cout<<"FOREVER"<<endl; else cout<<mod(C * x / d, B / d)<<endl; } return 0; }
- 1
信息
- ID
- 3572
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者