构造线性递推式+矩阵乘法


  题解戳PoPoQQQ

  

为了自己以后看的方便手打一遍好了>_>

  求$( \frac{b+\sqrt{d}}{2} )^n$的整数部分对p取模后的值

  其中$b\mod 2=1,d\mod 4=1,b^2 \leq d<(b+1)^2,n\leq10^{18}$

思路:

构造数列$a_n=b*a_{n-1}+\frac{d-b^2}{4}*a_{n-2}$

其中$a_0=2,a_1=b$

然后我们求出这个数列的通项公式,得到$a_n=(\frac{b+\sqrt{d}}{2})^n+(\frac{b-\sqrt{d}}{2})^n$

因此得到$(\frac{b+\sqrt{d}}{2})^n=a_n-(\frac{b-\sqrt{d}}{2})^n$

由于$b \mod 2=1, d \mod 4=1$,因此$\frac{d-b^2}{4}$一定是个正整数,故我们可以利用矩阵乘法来求出这个数列的第$n$项

然后对于$80\%$的数据$b^2\leq d <(b+1)^2$,对于$20\%$的数据$b=1,d=5$,因此$(\frac{b-\sqrt{d}}{2})^n \in (-1,0]$

故后面那一项对答案有贡献当且仅当 $d\not=b^2$且$n$为偶数

时间复杂度$O(log_2n)$

P.S.话说题目给的提示:题目名有意义的字符串“jxamfe”以及那个奇怪的模数我还是没明白提示在哪了……>_>我讨厌猜字谜QAQ

 /**************************************************************
Problem: 4002
User: Tunix
Language: C++
Result: Accepted
Time:48 ms
Memory:1272 kb
****************************************************************/ //Huce #5 A
#include<cmath>
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std;
typedef unsigned long long LL;
LL getll(){
LL v=,sign=; char ch=getchar();
while(ch<''||ch>'') {if (ch=='-') sign=-; ch=getchar();}
while(ch>=''&&ch<='') {v=v*+ch-''; ch=getchar();}
return v*sign;
}
const int N=,INF=~0u>>;
const LL MOD=7528443412579576937LL;
/*******************tamplate********************/
LL b,d,n;
struct matrix{
LL d[][];
LL* operator [] (int x){ return d[x];}
matrix(int x=){
F(i,,) F(j,,)
if (i==j && i) d[i][j]=x;
else d[i][j]=;
}
}a;
inline LL mul(LL a,LL b){
LL r=;
for(;b;b>>=,a=(a+a)%MOD)
if (b&) r=(r+a)%MOD;
return r;
}
inline matrix operator * (matrix a,matrix b){
matrix c;
F(i,,) F(j,,) F(k,,) (c[i][j]+=mul(a[i][k],b[k][j]))%=MOD;
return c;
}
inline matrix Pow(matrix a,LL b){
matrix r();
for(;b;b>>=,a=a*a) if (b&) r=r*a;
return r;
}
int main(){
b=getll(); d=getll(); n=getll();
a[][]=; a[][]=(d-b*b)/;
a[][]=; a[][]=b;
a=Pow(a,n);
cout<<((a[][]*%MOD+mul(b,a[][])-(d!=b*b&&!(n&)))%MOD+MOD)%MOD<<endl;
return ;
}

4002: [JLOI2015]有意义的字符串

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 54  Solved: 28
[Submit][Status][Discuss]

Description

B 君有两个好朋友,他们叫宁宁和冉冉。

有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求((b+sqrt(D)/2)^N的整数部分,请输出结果 Mod 7528443412579576937 之后的结果吧。

Input

一行三个整数 b;d;n

 

Output

一行一个数表示模 7528443412579576937 之后的结果。

Sample Input

1 5 9

Sample Output

76

HINT

0 <b^2 < d< (b +1)2 < 10^18。

Source

[Submit][Status][Discuss]

【BZOJ】【4002】【JLOI2015】有意义的字符串的更多相关文章

  1. bzoj 4002: [JLOI2015]有意义的字符串

    这个题... #include <bits/stdc++.h> #define rep(i, a, b) for (int i = a; i <= b; i++) #define d ...

  2. 【BZOJ】4002: [JLOI2015]有意义的字符串

    题意 求$\left \lfloor \left( \frac{b+\sqrt{d}}{2} \right)^n \right \rfloor \pmod {7528443412579576937} ...

  3. [JLOI2015]有意义的字符串

    4002: [JLOI2015]有意义的字符串 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1000  Solved: 436[Submit][St ...

  4. 【BZOJ4002】[JLOI2015]有意义的字符串(数论,矩阵快速幂)

    [BZOJ4002][JLOI2015]有意义的字符串(数论,矩阵快速幂) 题面 BZOJ 洛谷 题解 发现我这种题总是做不动... 令\(A=\frac{b+\sqrt d}{2},B=\frac{ ...

  5. BZOJ_4002_[JLOI2015]有意义的字符串_矩阵乘法

    BZOJ_4002_[JLOI2015]有意义的字符串_矩阵乘法 Description B 君有两个好朋友,他们叫宁宁和冉冉.有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求 Input 一行 ...

  6. 【BZOJ4002】[JLOI2015]有意义的字符串 数学

    [BZOJ4002][JLOI2015]有意义的字符串 Description B 君有两个好朋友,他们叫宁宁和冉冉.有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求 Input 一行三个整数 ...

  7. BZOJ4002 [JLOI2015]有意义的字符串

    据说这两场加起来只要170= =而这是最简单的题目了QAQ 看到$(\frac {b + \sqrt {d} } {2} )^n$,第一反应是共轭根式$(\frac {b - \sqrt {d} } ...

  8. 【BZOJ4002】[JLOI2015]有意义的字符串 - 矩阵乘法

    题意: 给出b,d,n,求$\lfloor(\frac{b+\sqrt{d}}{2})^n\rfloor \mod 999999999999999989$(原题是7528443412579576937 ...

  9. bzoj4002 [JLOI2015]有意义的字符串 特征根+矩阵快速幂

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4002 题解 神仙题. 根据下面的一个提示: \[ b^2 \leq d \leq (b+1)^ ...

  10. [BZOJ4002][JLOI2015]有意义的字符串-[快速乘法+矩阵乘法]

    Description 传送门 Solution 由于这里带了小数,直接计算显然会爆掉,我们要想办法去掉小数. 而由于原题给了暗示:b2<=d<=(b+1)2,我们猜测可以利用$(\fra ...

随机推荐

  1. SQL Server编程(05)游标

    在关系数据库中,我们对于查询的思考是面向集合的.而游标打破了这一规则,游标使得我们思考方式变为逐行进行.对于类C的开发人员来着,这样的思考方式会更加舒服. 正常面向集合的思维方式是: 而对于游标来说: ...

  2. js 获取当天23点59分59秒 时间戳 (最简单的方法)

    js 获取当天23点59分59秒 时间戳 (最简单的方法) new Date(new Date(new Date().toLocaleDateString()).getTime()+24*60*60* ...

  3. BAT命令介绍【转自Internet】

    一.简单批处理内部命令简介 1.Echo 命令 打开回显或关闭请求回显功能,或显示消息.如果没有任何参数,echo 命令将显示当前回显设置. 语法: echo [{on│off}] [message] ...

  4. android 特效UI实现

    弧形菜单 https://github.com/daCapricorn/ArcMenu

  5. 002-python基础-hello-world

    python hello.py 时,明确的指出 hello.py 脚本由 python 解释器来执行. 如果想要类似于执行shell脚本一样执行python脚本,例: ./hello.py ,那么就需 ...

  6. WPF 超链接方式

      <TextBlock>              <Hyperlink Name="hc" Click="hc_Click"   Navi ...

  7. kettle过滤、生成随机数、改变开始复制数量

    下面是一个用Kettle实现数据过滤.生成随机数.改变开始复制数量的连贯示意图. 首先,我们将控件一一建立,通过hop建立连接 下面对每一个控件进行设置 1.生成随机数控件(随机取一个数字与字符串) ...

  8. Transact-SQL 语句

    当流程控制语句必须执行一个包含两条或两条以上Transact-SQL语句块时,可以使用BEGIN...END语句进行控制 use testDB; go declare @name varchar() ...

  9. Nginx源码结构

    上一章对Nginx的架构有了一个初步的了解.这章,为了对源码仔细的剖析,先要对Nginx的源码结构有一个了解.从宏观上把握源码模块的结构. 一.nginx源码的3个目录结构 在安装的nginx的目录下 ...

  10. 贵州大学iPhone、Android(安卓)项目助跑计划!!!

    该计划旨在帮助同学们将各种脑中稀奇古怪的想法借助互联网/移动互联网相关的技术变成真实的项目. 谱写你的故事,从此刻开始! 我们帮助你提高编程(Java.C++.Objective-C.Android. ...