All X
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1077 Accepted Submission(s): 511
Problem Description
F(x,m)
代表一个全是由数字
x
组成的
m
位数字。请计算,以下式子是否成立:
F(x,m) mod k ≡ c
F(x,m) mod k ≡ c
Input
第一行一个整数
T
,表示
T
组数据。
每组测试数据占一行,包含四个数字 x,m,k,c
1≤x≤9
1≤m≤1010
0≤c<k≤10,000
每组测试数据占一行,包含四个数字 x,m,k,c
1≤x≤9
1≤m≤1010
0≤c<k≤10,000
Output
对于每组数据,输出两行:
第一行输出:"Case #i:"。 i 代表第 i 组测试数据。
第二行输出“Yes” 或者 “No”,代表四个数字,是否能够满足题目中给的公式。
第一行输出:"Case #i:"。 i 代表第 i 组测试数据。
第二行输出“Yes” 或者 “No”,代表四个数字,是否能够满足题目中给的公式。
Sample Input
3 1 3 5 2 1 3 5 1 3 5 99 69
Sample Output
Case #1: No Case #2: Yes Case #3: Yessolution;m个x组成的数=(10^m-1)/9*x,然后再运用X==Y(mod k)等价于X*c==Y*c(mod k*c)#include<cstdio> using namespace std; typedef long long ll; ll pow(ll n, ll mod) { ll a=10,ans = 1; while (n) { if (n & 1)ans = (ans*a) % mod; a = (a*a) % mod; n >>= 1; } return ans; } int main() { int t, n, k, c,ca=1; long long m; scanf("%d", &t); while (t--) { scanf("%d%I64d%d%d", &n, &m, &k, &c); k *= 9; c *= 9; ll ans = ((pow(m,k)-1)*n+k)%k; printf("Case #%d:\n", ca++); if (ans == c)printf("Yes\n"); else printf("No\n"); } return 0; }