HDU 5690 All X 数学
All X
题目连接:
http://acm.hdu.edu.cn/showproblem.php?pid=5690
Description
F(x,m) 代表一个全是由数字x组成的m位数字。请计算,以下式子是否成立:
F(x,m) mod k ≡ c
Input
第一行一个整数T,表示T组数据。
每组测试数据占一行,包含四个数字x,m,k,c
1≤x≤9
1≤m≤1010
0≤c<k≤10,000
Output
对于每组数据,输出两行:
第一行输出:"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:
Yes
Hint
题意
题解:
10^m-1 = 999999
10^m-1 / 9 * x = xxxxxxxxxx
((10^m)%9k - 1)/9*x%k = xxxxxxxxx%k
所以直接快速幂莽一波
代码
#include<bits/stdc++.h>
using namespace std;
long long quickpow(long long m,long long n,long long k)//返回m^n%k
{
long long b = 1;
while (n > 0)
{
if (n & 1)
b = (b*m)%k;
n = n >> 1 ;
m = (m*m)%k;
}
return b;
}
int x,k,c;
long long m;
void solve(int cas)
{
scanf("%d%lld%d%d",&x,&m,&k,&c);
int r = (quickpow(10,m,k*9)-1)/9*x%k;
c%=k;
printf("Case #%d:\n",cas);
if(r==c)printf("Yes\n");
else printf("No\n");
}
int main()
{
int t;
scanf("%d",&t);
for(int i=1;i<=t;i++)
solve(i);
return 0;
}