HDU 5690 查找循环节 数学公式快速幂+乘法逆元(除法取模)
来源:互联网 发布:centos gcc安装包下载 编辑:程序博客网 时间:2024/06/06 03:08
方法一 :因为m为10^10 次方,很大,所以猜测应该会出现循环节,
于是找到循环节映射出来即可
方法二:
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
用快速幂去做去做。
#include<cstdio>#include<cstring>#include<iostream>#define LL long long#define INF 0x3f3f3f3f#define bug puts("**********");using namespace std;int vis2[200000];int vis[1100000];int main(){ LL x,m,k,c; int t; scanf("%d",&t); for(int cas=1; cas<=t; cas++) { scanf("%lld%lld%lld%lld",&x,&m,&k,&c); LL sum=0; memset(vis2,-1,sizeof(vis2)); int start=-1,bit=0; printf("Case #%d:\n",cas); for(int i=0; i<m; i++) { sum=(sum*10+x)%k; vis[i]=sum; if(vis2[sum]!=-1) ///寻找循环节 { start=vis2[sum]; /// 循环开始的下标 bit=i-start; ///循环长度 break; } vis2[sum]=i; } if(start==-1) ///未出现循环节 { if(sum%k==c) puts("Yes"); else puts("No"); } else ///出现循环节 { if(m-1>=start) ///判断是否到达了循环的部分 { if(vis[(m-start-1)%bit+start]==c) ///哈希得到值 puts("Yes"); else puts("No"); } else { if(vis[m]==c) puts("Yes"); else puts("No"); } } } return 0;}
0 0
- HDU 5690 查找循环节 数学公式快速幂+乘法逆元(除法取模)
- 乘法逆元(除法取模)
- hdu 5407 CRB and Candies(素数筛选法,除法取模(乘法逆元))
- zoj3903-数学公式(快速幂除法逆元组合数模板)
- HDU 5407 CRB and Candies (2015多校第10场第一题)素数打表,除法取模(乘法逆元)
- 除法取模(逆元)
- 快速幂+乘法逆元+二项式定理(hdu 5793)
- Hdu 1452 Happy 2004(除数和函数,快速幂乘(模),乘法逆元)
- 除法取模与逆元
- 除法取模与逆元
- 除法取模 逆元 费马小定理
- 除法取模与逆元
- 除法取模和逆元
- HDU 6050 Funny Function【乘法逆元+快速幂】
- HDU 1452 Happy 2004 (素因子分解+快速幂模+乘法逆元)
- [数论]HDU 1452 Happy 2004 素因子分解+快速幂模+乘法逆元
- HDU 1452 Happy 2004 (素因子分解+快速幂模+乘法逆元)
- hdu 5793A Boring Question (打表 + 乘法逆元 + 快速模)
- nyoj 37 LCS
- Unity发布iOS后 闪屏图片 也就是splash image先黑一下 然后才显示
- codeforces_672A. Summer Camp(string)
- java抽象类练习
- PAT 1015 德才论
- HDU 5690 查找循环节 数学公式快速幂+乘法逆元(除法取模)
- 九度OJ 1001:A+B for Matrices
- python的dict与set
- 在Android开发中使用MVP模式
- MySQL数据库解压缩版(免安装版或zip版)无法输入中文,以及与Navicat中文显示一致的问题
- cplus学习
- POJ-2421-Constructing Roads(最小生成树 普利姆)
- GSM网络的结构
- Html(二)