hdu-5690 All X(快速幂+乘法逆元)

题目链接:

All X

Time Limit: 2000/1000 MS (Java/Others)   

 Memory Limit: 65536/65536 K (Java/Others)

Problem Description

F(x,m) 代表一个全是由数字x组成的m位数字。请计算,以下式子是否成立:

F(x,m) mod k ≡ c

Input

第一行一个整数T,表示T组数据。
每组测试数据占一行,包含四个数字x,m,k,c

1≤x≤9

1≤m≤10^10

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

题意:

思路:

m个x组成的数可以表示为x*(1+10+10^2+...+10^m-1)=x*(10^m-1)/9;

即x*(10^m-1)/9%k==c?    x*(10^m-1)%(9*k)==9*c?

AC代码:

//#include <bits/stdc++.h>

#include <iostream>
#include <queue>
#include <cmath>
#include <map>
#include <cstring>
#include <algorithm>
#include <cstdio>

using namespace std;
#define Riep(n) for(int i=1;i<=n;i++)
#define Riop(n) for(int i=0;i<n;i++)
#define Rjep(n) for(int j=1;j<=n;j++)
#define Rjop(n) for(int j=0;j<n;j++)
#define mst(ss,b) memset(ss,b,sizeof(ss));
typedef long long LL;
//const LL mod=1e9+7;
const double PI=acos(-1.0);
const int inf=0x3f3f3f3f;
const int N=1e5+25;
LL x,m,k,c;
LL mod;
LL fastmod(LL x,LL y)
{
    LL ans=1,base=x;
    while(y)
    {
        if(y&1)ans*=base,ans%=mod;
        base*=base;
        base%=mod;
        y=(y>>1);
    }
    return ans;
}
int main()
{
     int t,cnt=1;
     scanf("%d",&t);
     while(t--)
     {
         printf("Case #%d:\n",cnt++);
         scanf("%I64d%I64d%I64d%I64d",&x,&m,&k,&c);
            mod=9*k;
          LL fx=fastmod(10,m);
          LL ans=(fx*x%mod-x%mod)%mod;
          if(ans==9*c)printf("Yes\n");
          else printf("No\n");
     }

    return 0;
}
时间: 2024-10-14 20:04:08

hdu-5690 All X(快速幂+乘法逆元)的相关文章

hdu-4990 Reading comprehension(快速幂+乘法逆元)

题目链接: Reading comprehension Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 32768/32768 K (Java/Others) Problem Description Read the program below carefully then answer the question.#pragma comment(linker, "/STACK:1024000000,1024000000"

2016&quot;百度之星&quot; - 初赛(Astar Round2A)--HDU 5690 |数学转化+快速幂

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 对于第一组测试数据:111 mod 5 = 1,公式不成立,所以答案是"No",而第二组测试数据中满足如上公式,所以答案是 "Yes". 解: m个x组成的数可以表示为x*(1+10+10^2+...+10^m-1)=x*(10^m-1)/9; 即x*(10^m-1)/9%

HDU 5793 A Boring Question (找规律 : 快速幂+乘法逆元)

A Boring Question Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 865    Accepted Submission(s): 534 Problem Description There are an equation.∑0≤k1,k2,?km≤n∏1?j<m(kj+1kj)%1000000007=?We define

Happy 2004(快速幂+乘法逆元)

Happy 2004 问题描述 : Consider a positive integer X,and let S be the sum of all positive integer divisors of 2004^X. Your job is to determine S modulo 29 (the rest of the division of S by 29). Take X = 1 for an example. The positive integer divisors of 2

Hdu 4965(矩阵快速幂)

题目链接 Fast Matrix Calculation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 87    Accepted Submission(s): 39 Problem Description One day, Alice and Bob felt bored again, Bob knows Alice is a

数论——快速幂,模运算及快速幂求逆元

一.快速幂 原理: 快速幂的原理十分简单. ak=a2^0*a2^1*a2^2*…a2^x,其中k=20+21+22+…+2x. 这显然是正确的.因为任何一个数都可以表示成二进制. 接下去利用位运算实现即可. 代码实现 模板题链接:快速幂 代码模板如下:时间复杂度O(logk) int qmi(int a,int k,int p) { int res=1%p; while(k) { if(k&1)res=(long long)res*a%p; a=(long long)a*a%p; k>&g

hdu 3221 Brute-force Algorithm(快速幂取模,矩阵快速幂求fib)

http://acm.hdu.edu.cn/showproblem.php?pid=3221 一晚上搞出来这么一道题..Mark. 给出这么一个程序,问funny函数调用了多少次. 我们定义数组为所求:f[1] = a,f[2] = b, f[3] = f[2]*f[3]......f[n] = f[n-1]*f[n-2].对应的值表示也可为a^1*b^0%p,a^0*b^1%p,a^1*b^1%p,.....a^fib[n-3]*b^fib[n-2]%p.即a,b的指数从n=3以后与fib数列

快速幂乘法

本次我们来讲述快速幂乘法 快速幂乘法相对于普通的乘法有很大的时间复杂度优化,其原因是基于位运算的一种算法,空间复杂度能够减少到O( log N )级别.而普通的乘法,则是O( N ) 级别. 下面来看一下代码: #include<iostream> using namespace std; typedef long long ll; ll Quick_Multi(ll a, ll b); int main() { ll a, b;//a的b次幂 cout << "请输入a

hdu 1452 Happy 2004 (快速幂+取模乘法逆元)

Problem Description Consider a positive integer X,and let S be the sum of all positive integer divisors of 2004^X. Your job is to determine S modulo 29 (the rest of the division of S by 29).Take X = 1 for an example. The positive integer divisors of