BZOJ 1409 Password 矩阵乘法+线性筛

题目大意:求p^F[n] mod q 其中F是斐波那契数列,p是质数,q<p

由于pq互质因此可以套用欧拉定理

然后就是矩乘求斐波那契的事情了- -

垃圾题卡O(√q) 求Phi的时候要枚举质数 不能一个一个枚举

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const long long empty[2][2]={{0,0},{0,0}};
const long long I[2][2]={{1,0},{0,1}};
const long long trans[2][2]={{0,1},{1,1}};
int n,p,q,mod;
int prime[100100],tot;
bool not_prime[100100];
namespace Matrix_Multiplication{
	struct Matrix{
		long long xx[2][2];
		Matrix(const long long _[2][2])
		{
			memcpy(xx,_,sizeof xx);
		}
		long long* operator [] (int x)
		{
			return xx[x];
		}
		friend void operator *= (Matrix &x,Matrix y)
		{
			int i,j,k;
			Matrix z(empty);
			for(i=0;i<2;i++)
				for(j=0;j<2;j++)
					for(k=0;k<2;k++)
						(z[i][j]+=x[i][k]*y[k][j])%=mod;
			x=z;
		}
	};
	Matrix Quick_Power(Matrix x,int y)
	{
		Matrix re(I);
		while(y)
		{
			if(y&1) re*=x;
			x*=x; y>>=1;
		}
		return re;
	}
}
void Linear_Shaker()
{
	int i,j;
	for(i=2;i<=100000;i++)
	{
		if(!not_prime[i])
			prime[++tot]=i;
		for(j=1;prime[j]*i<=100000;j++)
		{
			not_prime[prime[j]*i]=true;
			if(i%prime[j]==0)
				break;
		}
	}
}
int Phi(int x)
{
	int i,re=x;
	for(i=1;(long long)prime[i]*prime[i]<=x;i++)
		if(x%prime[i]==0)
		{
			re/=prime[i];re*=prime[i]-1;
			while(x%prime[i]==0)
				x/=prime[i];
		}
	if(x!=1) re/=x,re*=x-1;
	return re;
}
int Quick_Power(long long x,int y)
{
	long long re=1;
	while(y)
	{
		if(y&1) (re*=x)%=q;
		(x*=x)%=q; y>>=1;
	}
	return re;
}
int main()
{
	using namespace Matrix_Multiplication;
	int T;
	Linear_Shaker();
	for(cin>>T>>p;T;T--)
	{
		scanf("%d%d",&n,&q);
		mod=Phi(q);
		int ans=Quick_Power(trans,n)[1][0];
		printf("%d\n",(int)Quick_Power(p,ans)%q);
	}
	return 0;
}
时间: 2024-11-06 08:07:31

BZOJ 1409 Password 矩阵乘法+线性筛的相关文章

BZOJ 3823 定情信物 线性筛乘法逆元

题目大意:n维多面体中有多少n-1维,n-2维,n-3维...1维元素,求他们的异或和并%p. 思路:考试题,当时做的时候不会线性筛乘法逆元,就得了70分... 算法和标程不太一样,标程好象是递推,但是我空间想象力不够,没推出来..只能找规律了..花了一个半小时才找出来的规律.. CODE: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #defin

[BZOJ 1409] Password

贴一发题面 1409: Password Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 242  Solved: 82[Submit][Status][Discuss] Description Rivest是密码学专家.近日他正在研究一种数列E = {E[1],E[2],……,E[n]},且E[1] = E[2] = p(p为一个质数),E[i] = E[i-2]*E[i-1] (若2<i<=n). 例如{2,2,4,8,32,256,8192,…

【BZOJ 2738】 矩阵乘法

2738: 矩阵乘法 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 841 Solved: 351 [Submit][Status][Discuss] Description 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. Input 第一行两个数N,Q,表示矩阵大小和询问组数: 接下来N行N列一共N*N个数,表示这个矩阵: 再接下来Q行每行5个数描述一个询问:x1,y1,x2,y2,k表示找到以(x1,y1)为左上角.

BZOJ 2693: jzptab [莫比乌斯反演 线性筛]

2693: jzptab Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1194  Solved: 455[Submit][Status][Discuss] Description Input 一个正整数T表示数据组数 接下来T行 每行两个正整数 表示N.M Output T行 每行一个整数 表示第i组数据的结果 Sample Input 1 4 5 Sample Output 122 HINT T <= 10000 N, M<=1000000

BZOJ 2813 奇妙的Fibonacci 线性筛

题目大意:给定i,求斐波那契数列中有多少F[j]是F[i]的约数,以及这些j的平方和 定理:Gcd(F[i],F[j])=F[Gcd(i,j)] 证明见 http://hi.baidu.com/wyl8899/item/b4ed30e6b9f404acce2d4f68 那么当F[j]|F[i]时,必有Gcd(F[j],F[i])=F[j] 则此时F[Gcd(j,i)]=F[j] 若Gcd(j,i)==j,则j|i 若Gcd(j,i)!=j,由于斐波那契数列中相等的两项只有F[1]=F[2]=1,

BZOJ 3288 Mato矩阵 线性筛

题目大意:一个M*M的矩阵,(i,j)位置上的值是gcd(i,j),问这个矩阵的行列式的值. 思路:考试的时候考了这个题,有人居然打表发现规律,简直跪啊... 其实用高斯消元之后不难发现,要求的就是从1到m的phi的乘积,一个线性筛就解决了. CODE: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define MAX 1000010 #defi

bzoj 3309 DZY Loves Math - 莫比乌斯反演 - 线性筛

对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0. 给定正整数a,b,求sigma(sigma(f(gcd(i,j)))) (i=1..a, j=1..b). Input 第一行一个数T,表示询问数. 接下来T行,每行两个数a,b,表示一个询问. Output 对于每一个询问,输出一行一个非负整数作为回答. Sample Input 4 7558588 9653114 6514903 445

矩阵乘法专题1——bzoj 1297 [SCOI2009] 迷路题解

题目链接 题意:给两个长度分别为n和m的序列,现在有两种操作:1.分别选择两个序列的一个非空前缀,切两个前缀的最后一位相同,删除之,得到1分(只累计),消耗e:2.直接删除两个序列,消耗值定于两个序列之前删除的元素个数之和,并且使得得到的分有效(之前没有有效分) 分析: 首先,问题其实就是转化成,进行若干次操作1,然后进行操作2 还要找到一个判别标准,来评判较优的状态(贪心) 每次的消耗值比较大,其实可以计算出最大的删除次数,这个值不是很大 状态表示: 简单的,一个状态可以表示为串A的位置.串B

矩阵乘法专题2——bzoj 1706 [usaco2007 Nov] relays 奶牛接力跑 题解

转载请注明:http://blog.csdn.net/jiangshibiao/article/details/24960651 [原题] 1706: [usaco2007 Nov]relays 奶牛接力跑 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 340  Solved: 162 [Submit][Status] Description FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项目.至于进行接力