All X
F(x,m) 代表一个全是由数字
x
x组成的
m
m位数字。请计算,以下式子是否成立:
F(x,m) mod k ≡ c
F(x,m) mod k ≡ c
每组测试数据占一行,包含四个数字 x,m,,c x,m,k,c
1≤x≤9
1≤m≤1010
0≤c<k≤10,000
第一行输出:"Case #i:"。 i i代表第 i i组测试数据。
第二行输出“Yes” 或者 “No”,代表四个数字,是否能够满足题目中给的公式。
3 1 3 5 2 1 3 5 1 3 5 99 69
Case #1:
No
Case #2:
Yes
Case #3:
Yes
对于第一组测试数据:111 mod 5 = 1,公式不成立,所以答案是”No”,而第二组测试数据中满足如上公式,所以答案是 “Yes”。
求(10m-1)*x*9%k==c
=> (10m-1)*x%9k == 9c
然后快速幂
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
int t;
long long x, m, k, c;
long long quickpowmod(long long x, long long y, long long mod)
{
long long ret = 1;
while(y){
if(y&1)
ret = ret*x%mod;
x = x*x%mod;
y >>= 1; ///=> y/=2;
}
return ret;
}
int main()
{
scanf("%d", &t);
int cas = 0;
while(t--){
scanf("%lld%lld%lld%lld", &x, &m, &k, &c);
printf("Case #%d:\n", ++cas);
long long mod = 9*k;
long long p = quickpowmod(10, m, mod);
if((p-1)*x%mod == 9*c)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}