bzoj 1409 Password
题目大意:
一种数列E = {E[1],E[2],……,E[n]}
且E[1] = E[2] = p(p为一个质数),E[i] = E[i-2]*E[i-1] (若2<i<=n)
在此基础上他又设计了一种加密算法,该算法可以通过一个密钥q (q < p)将一个正整数n加密成另外一个正整数d,计算公式为:d = E[n] mod q
思路:
首先可以想到快速幂
然后就是求一个数的斐波那契n项次方
因为斐波那契n项很大 所以log n很大会炸
因为p^phi(q)%q=1,注意q不一定是质数
所以只需要求出 f[i]%phi(q) 然后快速幂
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstdlib> 5 #include<cstring> 6 #include<algorithm> 7 #include<vector> 8 #include<queue> 9 #define inf 2139062143 10 #define ll long long 11 #define MAXN 100100 12 using namespace std; 13 inline ll read() 14 { 15 ll x=0,f=1;char ch=getchar(); 16 while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();} 17 while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();} 18 return x*f; 19 } 20 ll p[MAXN],ntp[MAXN],cnt,n,m,mod,T,m1; 21 struct mat {ll num[2][2];}; 22 mat mul(mat x,mat y) 23 { 24 mat res; 25 memset(res.num,0,sizeof(res.num)); 26 for(ll i=0;i<2;i++) 27 for(ll j=0;j<2;j++) 28 for(ll k=0;k<2;k++) 29 (res.num[i][j]+=x.num[i][k]*y.num[k][j])%=m1; 30 return res; 31 } 32 ll mat_q_pow(ll n) 33 { 34 if(n<=0) return 0; 35 mat t,res; 36 memset(res.num,0,sizeof(res.num)); 37 t.num[0][0]=t.num[0][1]=t.num[1][0]=1,t.num[1][1]=0; 38 res.num[0][0]=res.num[1][1]=1; 39 while(n) 40 { 41 if(n&1) res=mul(res,t); 42 t=mul(t,t); 43 n>>=1; 44 } 45 return res.num[0][1]; 46 } 47 void mem() 48 { 49 for(ll i=2;i<MAXN;i++) 50 { 51 if(!ntp[i]) p[++cnt]=i; 52 for(ll j=1;p[j]*i<MAXN;j++) 53 { 54 ntp[p[j]*i]=1; 55 if(i%p[j]==0) break; 56 } 57 } 58 } 59 void phi(ll x) 60 { 61 ll res=x; 62 for(ll i=1;p[i]*p[i]<=x;i++) 63 if(x%p[i]==0) 64 { 65 res/=p[i],res*=p[i]-1; 66 while(x%p[i]==0) x/=p[i]; 67 } 68 if(x!=1) res/=x,res*=x-1; 69 m1=res; 70 } 71 ll num_q_pow(ll k,ll x) 72 { 73 ll res=1; 74 while(x) 75 { 76 if(x&1) (res*=k)%=mod; 77 (k*=k)%=mod,x>>=1; 78 } 79 return res; 80 } 81 int main() 82 { 83 T=read(),n=read(); 84 mem(); 85 while(T--) 86 { 87 m=read(),mod=read(); 88 phi(mod); 89 printf("%lld\n",num_q_pow(n,mat_q_pow(m))%mod); 90 } 91 }
View Code
转载于:https://www.cnblogs.com/yyc-jack-0920/p/8515960.html
bzoj 1409 Password相关推荐
- bzoj 1409 Password 矩阵快速幂+欧拉函数
可以发现,该数组的mi就是斐波那契数列 所以要矩阵快速幂搞出第n位 但是斐波那契数列上涨的很快,这就需要欧拉定理了 p^phi(q)%q=1(gcd(p,q)==1) p是素数,所以可以用 然后需要5 ...
- Android开发之第三方框架使用汇总
1. image loading 框架: 1.1 Glide1.2 Picasso1.3 后续更新... 2.网络框架: 2.1 xUtil32.2 OkHttp32.3 Retrofit2.4 后续 ...
- 贝尔数C语言,bzoj 3501 PA2008 Cliquers Strike Back——贝尔数
用贝尔三角形 p^2 地预处理 p 以内的贝尔数.可以模(mod-1)(它是每个分解下的质因子的倍数,所以不影响分开算的时候). 用公式:\( Bell[n+p^{m}]=m*Bell[n]+Bell ...
- You must reset your password using ALTER USER statement before executing thi
第一次 安装好mysql 创建数据库的时候提示这个问题,百度了,自己的处理方法 就是第一次需要设置数据库的密码 ,把原始的数据库密码更改一下 更改密码的方法: mysql> SET PASSWO ...
- BZOJ.1558.[JSOI2009]等差数列(线段树 差分)
BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...
- S-T平面图中利用最短路求最小割(BZOJ 1001)
BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...
- BZOJ 1124: [POI2008]枪战Maf(构造 + 贪心)
题意 有 \(n\) 个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪. 因此,对于不同的开枪顺序,最后死的人也不同. 问最 ...
- BZOJ 2957楼房重建
传送门 线段树 //Twenty #include<cstdio> #include<cstdlib> #include<iostream> #include< ...
- redmine忘记username和password
环境: Ubuntu 13.10 bitnami-redmine-2.5.1-1-linux-x64-installer.run 用bitnami安装完redmine以后,有是否忘记了username ...
最新文章
- 系统架构设计:进程缓存和缓存服务,如何抉择?
- VHD(Virtual Hard Disk)的解析(上篇)——PyVinil的使用
- 如何系统地理解「交易平台」?
- 关于mbzuai的offer的三点思考
- 收起 展开 循环 php,CSS3 实现侧边栏展开收起动画
- 3.过滤数据 ---SQL
- JAVA实现置换加密和幻方加密(密码学)
- 计算机科学常见工具书清单、项目开发清单
- STP重新收敛过程和补充内容
- 王牌英雄怎么服务器维护了,王牌英雄steam版无法运行问题解决方法
- Hive性能调优之推测执行
- VB写的软件加壳都没用,超强反调试反破解分析,检测OD调试器
- SULLEY安装与使用
- 爬取2017年底最新中国全国五级行政区划代码省市区县乡镇村MySQL数据库
- 这是一篇1==“1”?励志:缓解压力 的文字
- matlab 计算物理,计算物理的MATLAB解法与可视化
- jar包配置开机自启
- 2019小明的比赛c++
- ECharts——条形图
- Maven多模块版本统一管理
热门文章
- c语言变长数组参数,使用gdb跟踪C语言中变长数组的实现
- esp8266 at接收数据中断时间_利用ESP8266获取网络同步时间(北京时间)
- oracle dblink 20001,解决ORA-02021: 不允许对远程数据库进行 DDL 操作下面通过DBLINK调用远程过程来执行这样的操作。...
- raw转bmp程序c语言,求指导,如何用c语言实现读取*.raw格式图像
- 集群服务器分析系统,集群服务器系统可扩展性的研究与实现
- Python爬虫之(三)urllib库
- 使用VS.NET2003操作SQLServer DTS.
- docker容器的使用
- 自定义高效支持点击监听的RecyclerView
- Journey源码分析二:整体启动流程