HDU 5690——All X——————【快速幂 | 循环节】
All X
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 879 Accepted Submission(s): 421
F(x,m) mod k ≡ c
每组测试数据占一行,包含四个数字x,m,k,c
1≤x≤9
1≤m≤1010
0≤c<k≤10,000
第一行输出:"Case #i:"。i代表第i组测试数据。
第二行输出“Yes” 或者 “No”,代表四个数字,是否能够满足题目中给的公式。
1 3 5 1
3 5 99 69
No
Case #2:
Yes
Case #3:
Yes
对于第一组测试数据:111 mod 5 = 1,公式不成立,所以答案是”No”,而第二组测试数据中满足如上公式,所以答案是 “Yes”。
#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——————【快速幂 | 循环节】的更多相关文章
- HDU——4291A Short problem(矩阵快速幂+循环节)
A Short problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- 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 ...
- hdu 4291 矩阵幂 循环节
http://acm.hdu.edu.cn/showproblem.php?pid=4291 凡是取模的都有循环节-----常数有,矩阵也有,并且矩阵的更奇妙: g(g(g(n))) mod 109 ...
- HDU 1061 Rightmost Digit --- 快速幂取模
HDU 1061 题目大意:给定数字n(1<=n<=1,000,000,000),求n^n%10的结果 解题思路:首先n可以很大,直接累积n^n再求模肯定是不可取的, 因为会超出数据范围, ...
- HDU 3977 斐波那契循环节
这类型的题目其实没什么意思..知道怎么做后,就有固定套路了..而且感觉这东西要出的很难的话,有这种方法解常数会比较大吧..所以一般最多套一些比较简单的直接可以暴力求循环节的题目了.. /** @Dat ...
- HDU.2640 Queuing (矩阵快速幂)
HDU.2640 Queuing (矩阵快速幂) 题意分析 不妨令f为1,m为0,那么题目的意思为,求长度为n的01序列,求其中不含111或者101这样串的个数对M取模的值. 用F(n)表示串长为n的 ...
- HDU 5667 构造矩阵快速幂
HDU 5667 构造矩阵快速幂 题目描述 解析 我们根据递推公式 设 则可得到Q的指数关系式 求Q构造矩阵 同时有公式 其中φ为欧拉函数,且当p为质数时有 代码 #include <cstdi ...
- HDU 6185 Covering 矩阵快速幂
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6185 题意:用 1 * 2 的小长方形完全覆盖 4 * n的矩形有多少方案. 解法:小范围是一个经典题 ...
- hdu 3746 Cyclic Nacklace(kmp最小循环节)
Problem Description CC always becomes very depressed at the end of this month, he has checked his cr ...
随机推荐
- How to: Cancel a Task and Its Children
http://msdn.microsoft.com/en-us/library/dd537607.aspx using System; using System.Collections.Concurr ...
- ASP 缓存处理及URL 重写
1 缓存 1.1.1 <%--通过设置VaryByParam =" VaryByParam ="none" %> 1.1.2 <%--带参数缓存,只要包 ...
- unit vs2017基于nunit framework创建单元测试
unit vs2017基于nunit framework创建单元测试 一.简叙: 单元测试大型项目中是必备的,所以不可忽视,一个项目的成败就看是否有单元测试,对后期的扩展维护都带来了便利. 二.安装 ...
- ORA-01722: 无效数字的解决方法
Select Count(t.Wip_No) As Consignvendnewcreateno_Num From Apps.View_Scm_Wip_Po t Where 1 = 1 And ...
- 张小龙演讲PPT
35条核心要点 一.产品经理要求 1.了解人性 2.了解群体心理 3.产品经理像上帝一样,可建造系统,制定规则,让群体在系统中演化 4.提高自己的艺术品位.质量要求品位/细节体验品位:作品而非产品:工 ...
- SPOJ 3267 DQUERY(离线+树状数组)
传送门 话说这好像HH的项链啊…… 然后就说一说上次看到的一位大佬很厉害的办法吧 对于所有$r$相等的询问,需要统计有多少个不同的数,那么对于同一个数字,我们只需要关心它最右边的那一个 比如$1,2, ...
- php.ini中safe_mode开启之后对于PHP系统函数的影响
safe_mode是提供一个基本安全的共享环境. 在一个多用户共享的phpweb服务器上,当这台服务器开启了safe_mode模式,有以下函数将会受到影响. 首先,以下尝试访问文件系统的函数将会被限制 ...
- POJ3076 Sudoku
POJ3076 Sudoku 本题为16*16宫格 剪枝见代码 #include <cstdio> #include <iostream> #include <algor ...
- css3 -webkit-filter
-webkit-filter是css3的一个属性,Webkit率先支持了这几个功能,感觉效果很不错.下面咱们就学习一下filter这个属性吧. 现在规范中支持的效果有: grayscale 灰度 ...
- 976 AlvinZH想回家(背包DP大作战T)
976 AlvinZH想回家 思路 如果在第i小时有一些飞机延误,那么一架飞机的c值越大,这一小时产生的损失也越大.而使这一小时产生的损失尽可能的小并不会导致接下来时间产生的损失增大.因此应当每一小时 ...