[bzoj 1409] Password 矩阵快速幂+欧拉函数
考试的时候想到了矩阵快速幂+快速幂,但是忘(bu)了(hui)欧拉定理。
然后gg了35分。
题目显而易见,让求一个数的幂,幂是斐波那契数列里的一项,考虑到斐波那契也很大,所以我们就需要欧拉定理了
p是素数,所以可以搞
然后我们用矩阵快速幂求出幂,然后快速幂即可解决问题
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
#define pos(i,a,b) for(int i=(a);i<=(b);i++)
#define Ma 50000
#define LL long long
LL prime[Ma],num_prime;
LL isnotprime[Ma]={1,1};
LL c,ou;
LL m,p,n,q;
struct matrix{
LL a[10][10];
matrix(){
memset(a,0,sizeof(a));
}
};
matrix mul(matrix aa,matrix b){
matrix c;
pos(i,0,1){
pos(j,0,1){
c.a[i][j]=0;
pos(k,0,1){
c.a[i][j]=(c.a[i][j]+aa.a[i][k]*b.a[k][j])%ou;
}
}
}
return c;
}
void getprime(){
pos(i,2,Ma-1){
if(!isnotprime[i]){
prime[num_prime++]=i;
}
for(int j=0;j<num_prime&&i*prime[j]<Ma;j++){
isnotprime[i*prime[j]]=1;
if(!(i%prime[j])){
c++;
break;
}
}
}
}
matrix init(){
matrix res;
pos(i,0,1){
pos(j,0,1)
res.a[i][j]=(i==j);
}
return res;
}
matrix ks(matrix aa,int k){
matrix res=init();
while(k){
if(k&1)
res=mul(res,aa);
k>>=1;
aa=mul(aa,aa);
}
return res;
}
LL oula(LL nn){
LL mm=(int)sqrt(nn+0.5);
LL an=nn;
for(int i=0;prime[i]<=mm;i++){
if(nn%prime[i]==0){
an=an/prime[i]*(prime[i]-1);
while(nn%prime[i]==0)
nn/=prime[i];
}
}
if(nn>1)
an=an/nn*(nn-1);
return an;
}
LL qpow(LL a,LL k,LL c){
LL an=1;
a=a%c;
while(k){
if(k&1){
an=(an*a)%c;
}
k>>=1;
a=(a*a)%c;
}
return an;
}
LL ans;
int main(){
getprime();
scanf("%lld%lld",&m,&p);
while(m--){
ans=0;
scanf("%lld%lld",&n,&q);
ou=oula(q);
matrix A;
A.a[0][0]=1;
A.a[0][1]=1;
A.a[1][0]=1;
A.a[1][1]=0;
matrix res=ks(A,n-1);
LL tmp=res.a[0][0];
//cout<<"ou="<<ou<<" tmp="<<tmp<<endl;
ans=qpow(p,tmp,q)%q;
printf("%lld\n",ans);
}
return 0;
}
[bzoj 1409] Password 矩阵快速幂+欧拉函数的更多相关文章
- HDU4549 M斐波那契数列 矩阵快速幂+欧拉函数+欧拉定理
M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Sub ...
- HDU 3221 矩阵快速幂+欧拉函数+降幂公式降幂
装载自:http://www.cnblogs.com/183zyz/archive/2012/05/11/2495401.html 题目让求一个函数调用了多少次.公式比较好推.f[n] = f[n-1 ...
- hdu 5895(矩阵快速幂+欧拉函数)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5895 f(n)=f(n-2)+2*f(n-1) f(n)*f(n-1)=f(n-2)*f(n-1)+2 ...
- HDU 4549 矩阵快速幂+快速幂+欧拉函数
M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Sub ...
- Product Oriented Recurrence(Codeforces Round #566 (Div. 2)E+矩阵快速幂+欧拉降幂)
传送门 题目 \[ \begin{aligned} &f_n=c^{2*n-6}f_{n-1}f_{n-2}f_{n-3}&\\ \end{aligned} \] 思路 我们通过迭代发 ...
- hdu4549 矩阵快速幂 + 欧拉降幂
R - M斐波那契数列 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit ...
- Super A^B mod C (快速幂+欧拉函数+欧拉定理)
题目链接:http://acm.fzu.edu.cn/problem.php?pid=1759 题目:Problem Description Given A,B,C, You should quick ...
- hdu 2814 快速求欧拉函数
/** 大意: 求[a,b] 之间 phi(a) + phi(a+1)...+ phi(b): 思路: 快速求欧拉函数 **/ #include <iostream> #include & ...
- BZOJ 1297 迷路(矩阵快速幂)
很容易想到记忆化搜索的算法. 令dp[n][T]为到达n点时时间为T的路径条数.则dp[n][T]=sigma(dp[i][T-G[i][n]]); 但是空间复杂度为O(n*T),时间复杂度O(n*n ...
随机推荐
- USACO hamming
考试周终于过去了一半,可以继续写USACO了. 先来看一下题目吧. Hamming CodesRob Kolstad Given N, B, and D: Find a set of N codewo ...
- 【操作教程】利用YCSB测试巨杉数据库性能
一.前言 巨杉数据库(SequoiaDB)是国内第一款新一代文档型分布式数据库,巨杉数据库由巨杉软件完全自主研发,拥有完全自主知识产权,不基于任何其它的开源项目.SequoiaDB数据库是为分布式存储 ...
- Ext秒表
Ext秒表 显示分和秒 js Ext.define('xy.StopWatchWindow', { extend: 'Ext.window.Window', width: 300, modal: tr ...
- axis1.4开发webservice服务端(快速入门)-基于jdk1.4
写在前面: 现在有很多开发webservice的方法以及框架,什么cxf等,但是这些在你编写服务类的时候都要用到注解这个功能.如果现在的jdk是1.4的,那么就不能使用注解这个功能了.所以这里可以用到 ...
- H5在线编辑器优化总结
花了三个半月做了个编辑器.自己一个人写写CSS,搞搞html,弄下JS,大部分精力都是掏鼓js,时间很仓促,后面领导帮忙写了四个页面逻辑(音频,图片,视频). 很多能优化的,以此文章记录要已经优化和未 ...
- js加强版图片轮播
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 仿网易新闻app下拉标签选择菜单
仿网易新闻app下拉标签选择菜单 仿网易新闻app下拉标签选择菜单,长按拖动排序,点击增删标签控件 ##示例 ##EasyTagDragView的使用 在layout布局里添加:
- 构建混合应用方式之 - Azure混合连接
前面介绍了通过WCF中继构建混合应用的方式,由于对WCF的依赖,使得其使用有一定的局限性,基本上只适用于本地服务是WCF的.NET应用.而混合连接则弥补了这一块的缺陷,除了支持原有WCF中继的功能之外 ...
- SQL Server Alwayson配置两个节点加共享文件夹仲裁见证
标签:MSSQL/节点和共享文件夹多数 概述 之前讲过多数节点的仲裁配置,多数节点一般3个节点以上的奇数个节点:常见的是使用3个节点节点多了也是浪费因为Alwayson的只读路由只能利用到一个只读副本 ...
- java基础系列--Exception异常处理
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7191280.html 1.概述 Java代码中的异常处理是非常重要的一环,从代码中可以看到 ...