All X

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 879    Accepted Submission(s): 421

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≤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

对于第一组测试数据:111 mod 5 = 1,公式不成立,所以答案是”No”,而第二组测试数据中满足如上公式,所以答案是 “Yes”。

 
Source
 
 
解题思路:打表找循环节。
 
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<string>
#include<iostream>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<set>
using namespace std;
typedef long long LL;
#define mid (L+R)/2
#define lson rt*2,L,mid
#define rson rt*2+1,mid+1,R
#pragma comment(linker, "/STACK:102400000,102400000")
const int maxn = 1e5 + 300;
const LL INF = 0x3f3f3f3f;
typedef long long LL;
typedef unsigned long long ULL;
LL vis[maxn], a[maxn];
int main(){
LL x, m, k, c;
int T, cas = 0;
scanf("%d",&T);
while(T--){
scanf("%lld%lld%lld%lld",&x,&m,&k,&c);
memset(vis,0,sizeof(vis));
int nn = 0, le = 0, st = 1;
LL cc;
LL n = 0;
for(int i = 1; ; i++){
n = n*10;
n = n + x;
n = n%k;
if(vis[n]){
cc = n;
break;
}else{
vis[n] = 1;
nn++;
a[nn] = n;
}
}
for(int i = 1; i <= nn; i++){
if(a[i] == cc){
le = nn+1 - i;
st = i;
break;
}
}
int flag = 0;
if(m < st){
if(a[m] == c){
flag = 1;
}
}else{
m -= st;
m %= le;
if(a[st+m] == c){
flag = 1;
}
}
printf("Case #%d:\n",++cas);
if(flag) puts("Yes");
else puts("No");
}
return 0;
} /*
55
3 5 99 69 3 4 4 2
3 8 4 2 2 8 3 2 */

  

解题思路:数学方法。

转自http://m.blog.csdn.net/article/details?id=51471639

这个数要mod k ,那这个数应该怎么表示呢?

就这样转化了,然后10^m可以通过快速幂解决,但是很明显,除以9操作怎么办,除法取模,余数是会改变的,逆元?但是9和k不一定互质,且k也不一定是质数,所以扩展欧几里得和费马小定理都不能用了,束手无策

好吧,这里提供一种小方法

就这样经过几步转化,我求d不需要进行除法取模了,那我上面的问题不就解决了?对的。

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<string>
#include<iostream>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<set>
using namespace std;
typedef long long LL;
#define mid (L+R)/2
#define lson rt*2,L,mid
#define rson rt*2+1,mid+1,R
#pragma comment(linker, "/STACK:102400000,102400000")
const int maxn = 1e5 + 300;
const LL INF = 0x3f3f3f3f;
typedef long long LL;
typedef unsigned long long ULL;
LL quick(LL x,LL n,LL p){
if(n == 0) return 1;
LL ret = 1;
while(n){
if(n&1) ret = ret*x % p;
n = n >> 1;
x = x*x % p;
}
return ret;
}
int main(){
LL x, m, k, c;
int T, cas = 0;
scanf("%d",&T);
while(T--){
scanf("%lld%lld%lld%lld",&x,&m,&k,&c);
k*=9;
LL ans = quick(10,m,k);
ans = (ans - 1 + k) % k;
ans /= 9;
k /= 9;
ans = ans * x % k;
bool flag = 0;
if(ans == c)
flag = 1;
printf("Case #%d:\n",++cas);
if(flag) puts("Yes");
else puts("No");
}
return 0;
}

  

HDU 5690——All X——————【快速幂 | 循环节】的更多相关文章

  1. HDU——4291A Short problem(矩阵快速幂+循环节)

    A Short problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  2. 2016"百度之星" - 初赛(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 ...

  3. hdu 4291 矩阵幂 循环节

    http://acm.hdu.edu.cn/showproblem.php?pid=4291 凡是取模的都有循环节-----常数有,矩阵也有,并且矩阵的更奇妙: g(g(g(n))) mod 109  ...

  4. HDU 1061 Rightmost Digit --- 快速幂取模

    HDU 1061 题目大意:给定数字n(1<=n<=1,000,000,000),求n^n%10的结果 解题思路:首先n可以很大,直接累积n^n再求模肯定是不可取的, 因为会超出数据范围, ...

  5. HDU 3977 斐波那契循环节

    这类型的题目其实没什么意思..知道怎么做后,就有固定套路了..而且感觉这东西要出的很难的话,有这种方法解常数会比较大吧..所以一般最多套一些比较简单的直接可以暴力求循环节的题目了.. /** @Dat ...

  6. HDU.2640 Queuing (矩阵快速幂)

    HDU.2640 Queuing (矩阵快速幂) 题意分析 不妨令f为1,m为0,那么题目的意思为,求长度为n的01序列,求其中不含111或者101这样串的个数对M取模的值. 用F(n)表示串长为n的 ...

  7. HDU 5667 构造矩阵快速幂

    HDU 5667 构造矩阵快速幂 题目描述 解析 我们根据递推公式 设 则可得到Q的指数关系式 求Q构造矩阵 同时有公式 其中φ为欧拉函数,且当p为质数时有 代码 #include <cstdi ...

  8. HDU 6185 Covering 矩阵快速幂

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6185 题意:用 1 * 2 的小长方形完全覆盖 4 * n的矩形有多少方案. 解法:小范围是一个经典题 ...

  9. hdu 3746 Cyclic Nacklace(kmp最小循环节)

    Problem Description CC always becomes very depressed at the end of this month, he has checked his cr ...

随机推荐

  1. Docker 1.3.3/1.4.0 发布下载,Linux 容器引擎

    Docker 1.3.3 发布,下载地址: https://github.com/docker/docker/archive/v1.3.3.zip 改进记录包括: Security Fix path ...

  2. 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错

    如题 报错提示: 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错.字符串的长度超过了为 maxJsonLength 属性设置的值.","Sta ...

  3. 牛客网提高组模拟赛第五场 T1同余方程(异或)(位运算)

    区间不好做,但是我们可以转化成前缀来做.转化为前缀之后之后就是二维前缀和. 但是我还是不怎么会做.所以只能去看吉老师的题解 (确定写的那么简单真的是题解???). 我们要求模一个数余0,就等于找它的倍 ...

  4. 包(package)

    一个文件夹管理多个模块文件,这个文件夹就被称为包,如下: 既然是多个模块文件,那么涉及多个模块怎么导入呢? ***当前路径下包之间模块导入: import wsg ***不同路径下包之间模块导入: f ...

  5. 判断AVL树是否平衡

    AVL树是高度的平衡二插搜索树,其左子树和右子树的高度之差不超过1(树中的左子树和右子树都是AVL树),维持这个高度之差就要控制它的平衡因子.那么判断一颗AVL树是否平衡就需要判断它的左子树和右子树高 ...

  6. php生成N个不重复的随机数实例

    思路: 将随机数存入数组,再在数组中去除重复的值,即可生成一定数量的不重复随机数. /* * array unique_rand( int $min, int $max, int $num ) * 生 ...

  7. 小记一次shellscript的麻烦

    小记一次shellscript的麻烦 一.起因: 之前写过篇文章 文本分析实例 ,大致的内容就是对 "nginx的web服务器进行日志分析,删除不被访问的截图". 点我打开哔哩哔哩 ...

  8. python requests 包 使用

    1: 发送带 cookie 的 请求 resp = requests.get(self.url_item_list_first_page, cookies=self.cookies) >> ...

  9. 如何在NSDocumentDirectory内新建一个文件夹

    iOS下载文件一般保存到NSDocumentDirectory内,但是为了更好整理文件内容,那就要自定义的生成一些文件夹,和做一些删除文件夹的操作. - (NSString *)pathToPatie ...

  10. CSS 加号选择器("+")

    加号选择器("+"):就是指对找到的某类的元素除第一个元素以外的兄弟元素起作用,即第一个元素不起作用,后面的兄弟元素都会起作用   效果:给每一个li加一个border-left, ...