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;
}
posted @ 2016-05-22 08:50  qscqesze  阅读(360)  评论(0编辑  收藏  举报