F(x,m)F(x,m) 代表一个全是由数字
xx组成的
mm位数字。请计算,以下式子是否成立:
F(x,m) mod k ≡ cF(x,m) mod k ≡ c
Input
第一行一个整数
TT,表示
TT组数据。
F(x,m) mod k ≡ cF(x,m) mod k ≡ c
每组测试数据占一行,包含四个数字 x,m,k,cx,m,k,c
1≤x≤91≤x≤9
1≤m≤10101≤m≤1010
0≤c<k≤10,0000≤c<k≤10,000
Output 对于每组数据,输出两行:
第一行输出:"Case #i:"。 ii代表第 ii组测试数据。
第二行输出“Yes” 或者 “No”,代表四个数字,是否能够满足题目中给的公式。
Sample Input
3 1 3 5 2 1 3 5 1 3 5 99 69Sample Output
Case #1:NoCase #2:YesCase #3:Yes
这个鬼题很烦人,通过题意可得到一个公式(pow(10,m)-1)/9*x%k==c;其中
(pow(10,m)-1)/9*x 是那个全为x的数;
如果用上面的公式还要用逆元,所以可以将上面的变形
9*c=pow(10,m)*x%(9*k)
这样就简单了
#include<cstdio>
#include<iostream>
#include<cmath>
#define ll long long
using namespace std;
ll PowerMod(ll a, ll b, ll c)
{
int ans = 1;
a = a % c;
while(b>0) {
if(b % 2 == 1)
ans = (ans * a) % c;
b = b/2;
a = (a * a) % c;
}
return ans;
}
int main()
{
int n,j;
ll m,x,k,c;
scanf("%d",&n);
for(j=1;j<=n;j++)
{
scanf("%lld%lld%lld%lld",&x,&m,&k,&c);
ll sum=(PowerMod(10, m, 9 * k) - 1) % (9 * k);
if(sum * x%(9*k)== c*9)
printf("Case #%d:\nYes\n",j);
else
printf("Case #%d:\nNo\n",j);
}
return 0;
}