#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int x, k, c;
long long m;
struct Mat {
int v[2][2];
Mat() {memset(v, 0, sizeof(v));}
Mat operator * (const Mat& c) const {
Mat ans;
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
for (int x = 0; x < 2; x++) {
ans.v[i][j] = (ans.v[i][j] + v[i][x] * c.v[x][j] % k) % k;
}
}
}
return ans;
}
};
Mat pow_mod(Mat x, long long k) {
Mat ans;
for (int i = 0; i < 2; i++) ans.v[i][i] = 1;
while (k) {
if (k&1) ans = ans * x;
x = x * x;
k >>= 1;
}
return ans;
}
int T;
int main() {
int cas = 0;
scanf("%d", &T);
while (T--) {
scanf("%d%lld%d%d", &x, &m, &k, &c);
Mat A;
A.v[0][0] = 10 % k; A.v[0][1] = 1 % k;
A.v[1][0] = 0 % k; A.v[1][1] = 1 % k;
A = pow_mod(A, m);
printf("Case #%d:\n", ++cas);
if (x * A.v[0][1] % k == c) printf("Yes\n");
else printf("No\n");
}
return 0;
}
07-13
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交