题目意思
给你四个数x,m,k,c,分别代表有m个x,现在让m个x对k取模,如果结果等于c就输出Yes,否则输出No。
解题思路
由于题上给出的m值很大,所以用普通方法直接写的话肯定会超时。现在我们就转换一种方法。如果(10^m-1)/ 9*x是不是就可以代表m个x。那么我们现在让(10^m-1)/ 9 * x对k取模与c进行比较即可。那么我们可以用快速幂来求10^m。
代码部分
#include <iostream>
#include <string.h>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <queue>
using namespace std;
long long int QuickPow(long long int x,long long int N,long long int mod)
{
long long int res = x;
long long int ans = 1;
while(N)
{
if(N&1)
{
ans = ans * res%mod;
}
res = res*res%mod;
N = N>>1;
}
return ans;
}
int main()
{
int t;
scanf("%d",&t);
long long int n,m,k,c;
int cas=0;
while(t--)
{
scanf("%lld%lld%lld%lld",&n,&m,&k,&c);
long long int mod=9*k;
long long int ans=QuickPow(10,m,mod);
bool flag=false;
if((ans-1)*n%mod==9*c)
flag=true;
if(flag)
{
cout<<"Case #"<<++cas<<":"<<endl;
cout<<"Yes"<<endl;
}
else
{
cout<<"Case #"<<++cas<<":"<<endl;
cout<<"No"<<endl;
}
}
return 0;
}