题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5690
解题思路:
求m个x组成的数模k后是否为c。
x(1+10^1+10^2+........+10^m-2+10^m-1) = x*(10^m-1)/9
x*(10^m - 1)/9 % k = c
x*(10^m - 1)%9k = 9c
整数快速幂求解一下即可。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
typedef long long LL;
//求10的k次方
LL quickPow(LL k,LL mod) {
LL ans,res;
ans = 1;
res = 10;
while(k) {
if(k&1) {
ans = (ans*res)%mod;
}
res = (res*res)%mod;
k = k>>1;
}
return ans;
}
int main() {
LL x,m,k,c,t=0;
int T;
scanf("%d",&T);
while(T--) {
cin>>x>>m>>k>>c;
k = 9*k;
c = 9*c;
LL temp = quickPow(m,k)-1;
temp = (temp + k)%k;
temp = (x*temp)%k;
printf("Case #%d:\n",++t);
if(temp == c) {
printf("Yes\n");
}
else {
printf("No\n");
}
}
return 0;
}