HDU 5451 Best Solver
没有意识到循环节最大是M^2,用域Z_M下二阶可逆矩阵群的最大循环节(M^2-1)*(M^2-M)来做,考虑大数乘法,矩阵乘法,做到吐血。将代码贴在下方留作纪念。
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define ms(arr,a) memset(arr,a,sizeof arr)
long long P;
long long M;
long long x;
long long modM(long long x)
{
if(x<)return x%M+M;
else return x%M;
}
struct matrix
{
long long a,b,c,d;
matrix(){}
matrix(long long m,long long n,long long p,long long q):a(m),b(n),c(p),d(q){}
matrix(long long x):a(x),b(),c(),d(x){}
};
matrix solve(matrix A,matrix B)
{
matrix ret;
ret.a=modM(A.a*B.a+A.b*B.c);
ret.b=modM(A.a*B.b+A.b*B.d);
ret.c=modM(A.c*B.a+A.d*B.c);
ret.d=modM(A.c*B.b+A.d*B.d);
return ret;
}
long long solve(long long x,long long y)
{
long long ret=;
while(x)
{
if(x&)ret=(ret+y)%P;
y=(*y)%P;
x>>=;
}
return ret;
}
template<typename T>
T quick_pow(T a,long long n)
{
T ret();
while(n)
{
if(n&)ret=solve(ret,a);
a=solve(a,a);
n>>=;
}
return ret;
}
int main()
{
int T;scanf("%d",&T);
rep(Case,,T)
{
scanf("%lld%lld",&x,&M);
P=(M*M-)*(M*M-M);
long long N=(quick_pow(2LL,x)+)%P;
//printf("%lld\n",N);
matrix tmp=(matrix){,-,,};
tmp=quick_pow(tmp,N);
printf("Case #%d: %lld\n",Case,modM(tmp.c*+tmp.d*-));
}
}
HDU 5451 Best Solver的更多相关文章
- Hdu 5451 Best Solver (2015 ACM/ICPC Asia Regional Shenyang Online) 暴力找循环节 + 递推
题目链接: Hdu 5451 Best Solver 题目描述: 对于,给出x和mod,求y向下取整后取余mod的值为多少? 解题思路: x的取值为[1, 232],看到这个指数,我的心情是异常崩 ...
- hdu 5451 Best Solver 矩阵循环群+矩阵快速幂
http://acm.hdu.edu.cn/showproblem.php?pid=5451 题意:给定x 求解 思路: 由斐波那契数列的两种表示方法, 之后可以转化为 线性表示 F[n] = ...
- 特征根法求通项+广义Fibonacci数列找循环节 - HDU 5451 Best Solver
Best Solver Problem's Link Mean: 给出x和M,求:(5+2√6)^(1+2x)的值.x<2^32,M<=46337. analyse: 这题需要用到高中的数 ...
- ACM学习历程—HDU 5451 Best Solver(Fibonacci数列 && 快速幂)(2015沈阳网赛1002题)
Problem Description The so-called best problem solver can easily solve this problem, with his/her ch ...
- HDU - 5451 Best Solver(循环节+矩阵快速幂)
Best Solver The so-called best problem solver can easily solve this problem, with his/her childhood ...
- HDU 5451 Best Solver 数论 快速幂 2015沈阳icpc
Best Solver Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 65535/102400 K (Java/Others)Tota ...
- HDU 5451 Best Solver(fibonacci)
感谢这道题让我复习了一遍线代,还学习了一些奇奇怪怪的数论. 令 二项展开以后根号部分抵消了 显然有 所以要求的答案是 如果n比较小的话,可以直接对二项式快速幂,但是这题n很大 这个问题和矩阵的特征值以 ...
- HDU 5451 广义斐波那契数列
这道题目可以先转化: 令f(1) = 5+2√6 f(2) = f(1)*(5+2√6) ... f(n) = f(n-1)*(5+2√6) f(n) = f(n-1)*(10-(5-2√6)) = ...
- hdu 5451(矩阵 +Fibonacci )
题意:求 [(5 + 2*sqrt(6))^(1 + 2^x)] % M 基于hdu2256可以求(5 + 2*sqrt(6))^ n 但是n特别大,我们可以找矩阵的循环节 两种可能 1.mod-1 ...
随机推荐
- 实践指路明灯,源码剖析flink-metrics
1. 通过上期的分享,我们对 Metrics 类库有了较深入的认识,并对指标监控的几个度量类型了如指掌. 本期,我们将走进当下最火的流式处理框架 flink 的源码,一同深入并学习一下别人家的代码. ...
- js中的位置属性
原生js中位置信息 clientLeft,clientTop:表示内容区域的左上角相对于整个元素左上角的位置(包括边框),实测,clientLeft=左侧边框的宽度,clientTop=顶部边框的宽度 ...
- Oauth2.0详解,Oauth2.0协议原理
角色: RO (resource owner): 资源所有者,对资源具有授权能力的人,通常比喻为用户 RS (resource server): 资源服务器,存储资源.并处理对资源的访问请求 Clie ...
- Java第三天,如何从键盘输入?匿名对象的使用方法
在学习完Java的基础语法之后,我们还需要学会如何使用API文档,这几乎是程序员所必备的能力.对于API我们不必须去记住每一个类的功能乃至用法,只需会查就行了.但是话说回来,一些经常使用的类我们还是必 ...
- 汇编刷题:根据公式 Z=(X+Y)*8-X)/4 计算Z的结果(本题将结果放在AL寄存器里)
DATA SEGMENT X DB 10 Y DB 20 Z DB 00 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DAT ...
- 34.1 字符流-- FileRead FileWrite
一次读取一个字符 FileReader fr = new FileReader("aa.txt"); // System.out.println(fr.read()); // Sy ...
- 127.0.0.1和localhost区别
- 一个不错的spring 学习博客
http://www.iteye.com/blogs/subjects/spring-tittle-tattle
- B - Fadi and LCM CodeForces - 1285C 质因子
题目大意很简单,给你一个整数X,让你求a和b,使得max(a,b)尽可能的小,然后打印a,b 题解:想到了质因子分解,也考虑到了暴力,但是觉得暴力的话会TLE,所以打算用贪心做,然后就一直Wa.... ...
- 远程登录redis
没想到吧,我居然已经摸到了redis. 远程登录redis redis-cli -h 127.0.0.1 -p 6379 ip地址和端口记得换成自己的