链接: Best Solver

题目分析:

这个题目的关键点是需知道“共轭”.

如 :(A√B + C√D)  和 (A√B - C√D) 是共轭的

这个有一个规律 (A√B + C√D)^n + (A√B - C√D)^n  是一个整数(这里大家可以写写试试看)。

由题目可知:

因为我们要求的是:(5+2√6)^(1+2x), 我们可以构造一对共轭数。 (5-2√6),

因为0<(5-2√6) < 1, 所以 0<(5-2√6)^n < 1

故: 我们的式子由上述共轭的性质可知 y = (5+2√6)^(1+2x) + (5-2√6)^(1+2x) - 1;(y是要向下取整)

然后我们的y其实是有一个递推关系的:

F(n) = 10*F(n-1) - F(n-2).

证明如下:

设: Sn = (5+2√6)^n + (5-2√6)^n;

Sn * ( (5+2√6) + (5-2√6) )  = Sn * 10 = Sn+1 + Sn-1 * 1;

故: Sn+1 = 10*Sn  - Sn-1;

=================================================================================================

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const LL INF = 0xfffffff;
const LL maxn = ;
int dp[maxn];
int GetLoop(int m)
{
memset(dp, , sizeof(dp));
dp[] = %m;
dp[] = %m;
for(int i=; i<=maxn-; i++)
{
dp[i] = (*dp[i-] - dp[i-]+m)%m; if(dp[i] == dp[] && dp[i-] == dp[])
return i-;
}
return -;
}
int QuickPow(int a,int b,int MOD)
{
int ans = , k = a; while(b)
{
if(b% == )
ans = (ans * k)%MOD;
k = (k * k)%MOD;
b /= ;
}
return (ans+)%MOD;
} int main()
{
int T, n, m, cas = ;
cin >> T;
while(T--)
{
cin >> n >> m; int LoopNode = GetLoop(m);
int ans = QuickPow(, n, LoopNode);
printf("Case #%d: %d\n",cas++, (dp[ans%LoopNode] - )%m);
}
return ;
}

5451 HDU Best Solver的更多相关文章

  1. Hdu 5451 Best Solver (2015 ACM/ICPC Asia Regional Shenyang Online) 暴力找循环节 + 递推

    题目链接: Hdu  5451  Best Solver 题目描述: 对于,给出x和mod,求y向下取整后取余mod的值为多少? 解题思路: x的取值为[1, 232],看到这个指数,我的心情是异常崩 ...

  2. hdu 5451 Best Solver 矩阵循环群+矩阵快速幂

    http://acm.hdu.edu.cn/showproblem.php?pid=5451 题意:给定x    求解 思路: 由斐波那契数列的两种表示方法, 之后可以转化为 线性表示 F[n] = ...

  3. 特征根法求通项+广义Fibonacci数列找循环节 - HDU 5451 Best Solver

    Best Solver Problem's Link Mean: 给出x和M,求:(5+2√6)^(1+2x)的值.x<2^32,M<=46337. analyse: 这题需要用到高中的数 ...

  4. 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 ...

  5. HDU - 5451 Best Solver(循环节+矩阵快速幂)

    Best Solver The so-called best problem solver can easily solve this problem, with his/her childhood ...

  6. HDU 5451 Best Solver 数论 快速幂 2015沈阳icpc

    Best Solver Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 65535/102400 K (Java/Others)Tota ...

  7. HDU 5451 Best Solver(fibonacci)

    感谢这道题让我复习了一遍线代,还学习了一些奇奇怪怪的数论. 令 二项展开以后根号部分抵消了 显然有 所以要求的答案是 如果n比较小的话,可以直接对二项式快速幂,但是这题n很大 这个问题和矩阵的特征值以 ...

  8. HDU 5451 Best Solver

    没有意识到循环节最大是M^2,用域Z_M下二阶可逆矩阵群的最大循环节(M^2-1)*(M^2-M)来做,考虑大数乘法,矩阵乘法,做到吐血.将代码贴在下方留作纪念. #include<bits/s ...

  9. HDOJ(HDU) 1898 Sempr == The Best Problem Solver?(水题、、、)

    Problem Description As is known to all, Sempr(Liangjing Wang) had solved more than 1400 problems on ...

随机推荐

  1. Eclipse中文语言包下载

    Kepler .Juno . Indigo语言包: http://www.eclipse.org/babel/downloads.php 其他低版本Eclipse语言包下载: http://archi ...

  2. Java基础知识强化之集合框架笔记33:Arrays工具类中asList()方法的使用

    1. Arrays工具类中asList()方法的使用 public static <T> List<T> asList(T... a): 把数组转成集合 注意事项: 虽然可以把 ...

  3. 关于一点coding.net与git配合在AndroidStudio/Idea上的使用笔记个的

    编写程序的我们经常需要对我们写的代码做版本控制,或者分支管理,具备类似功能的软件很多,诸如SVN,Git,CVS等等!但配置版本控制服务器(SVN server etc.)是繁琐的并且需要一定的成本! ...

  4. C# Activator.CreateInstance()

    C#在类工厂中动态创建类的实例,所使用的方法为: 1. Activator.CreateInstance (Type) 2. Activator.CreateInstance (Type, Objec ...

  5. Scrum教练不应兼任product owner

    ScrumMasters Should Not Also Be Product Owners(中文翻译) December 2, 2014 by Mike Cohn 翻译:2015.2.18 by o ...

  6. kvo深入浅出举例

    一,概述   KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知.简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知 ...

  7. c#wiform中KeyDown事件

    当首次按下键盘上某个键时发生事件. 例如 private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Ke ...

  8. 明解C语言,练习13-3,从文件中读入个人信息,按身高排序后显示

    #include <stdio.h> #define NUMBER 6 #define F_PATH "D:\\C_C++\\ec13-3\\hw.dat" typed ...

  9. SGU 117.Counting

    时间限制: 0.25 sec. 空间限制: 4096 KB 题目大意: 给你n,m,k(都小于10001),和 n 个数,求这n个数中有多少个数的m次幂能够整除k.(即 n i^m % k==0). ...

  10. SGU 167.I-country

    时间限制:0.75s 空间限制:65M 题意: 在一个n*m(n,m<=15)的网格中,每个格子有一个值,现在从网格中取出k(k<=n*m)个,保证在选中的格子中从任意一个格子去另外的所有 ...