这个模数比较有趣

可以求出 $\sqrt{5}$

然后就可以做了

$f_n=\dfrac{\sqrt{5}}{5}[(\dfrac{\sqrt{5}+1}{2})^n-(\dfrac{1-\sqrt{5}}{2})^n]$

分正负号考虑

令 $A=\dfrac{\sqrt{5}+1}{2},B=\dfrac{\sqrt{5}-1}{2}$

那么 $AB=1$

要解 $A^n+\dfrac{1}{A^n}=C$

令 $x=A^n$

那么 $x+\dfrac{1}{x}=C$

$x=\dfrac{c\pm \sqrt{c^2-4}}{2}$

再解一下 $n$

还有 Claris 提出的方法

$f_{n-1} f_{n+1} - f_n^2 = (-1)^n$

就可以求出 $f_{n+1}$ 从而通过矩阵的bsgs来求 $n$

以下代码是我的做法的,Claris的做法先坑着

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a),i##_end=(b);i<=i##_end;++i)
#define For(i,a,b) for(int i=(a),i##_end=(b);i<i##_end;++i)
#define per(i,a,b) for(int i=(b),i##_st=(a);i>=i##_st;--i)
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define dbg(x) cerr<<#x" = "<<x<<endl
#define debug(...) fprintf(stderr, __VA_ARGS__)
#define Es(x,i) for(Edge*i=G[x];i;i=i->nxt)
typedef long long ll;
typedef pair<int,int> pii;
const int inf=~0u>>1,MOD=1e9+9;
inline int rd() {
int x,c,f=1;while(!isdigit(c=getchar()))f=c!='-';x=c-'0';
while(isdigit(c=getchar()))x=x*10+c-'0';return f?x:-x;
}
inline int pw(int n,int m){int r=1;for(;m;m>>=1,n=(ll)n*n%MOD)if(m&1)r=(ll)r*n%MOD;return r;}
/*
sqrt(5)=
383008016
616991993
*/
#define Inv(i) pw((i),MOD-2)
const int t5=616991993,i5=Inv(5),i2=Inv(2),it5=Inv(t5),g=13;
const int A=(t5+1)/2,B=(t5-1)/2;
int C;
int bsgs(int G,int Q){
static const int S=ceil(sqrt(MOD)+1);
map<int,int> F;
int t=Q;F[Q]=0;
rep(i,1,S){
t=(ll)t*G%MOD;
if(!F.count(t))F[t]=i;
}
t=pw(G,S);int q=1;
rep(i,1,S){
q=(ll)q*t%MOD;
if(F.count(q)){
return i*S-F[q];
}
}
return -1;
}
int F(int Q){
int t=pw(Q,MOD>>1);
if(t==-1)return -1;
else if(!t){
return 0;
}else{
t=bsgs(g,Q);
if(t==-1)return -1;
return pw(g,t/2);
}
}
inline int Calc(int t){
int q=1ll*t5*i5%MOD;
int p=(pw(A,t)+(t%2?1:-1)*pw(B,t))%MOD;
if(p<0)p+=MOD;p=(ll)p*q%MOD;
return p;
}
int ans=inf,AA;
inline void Upd(int C){
C%=MOD-1;
if(C<0)C+=MOD-1;
if(Calc(C)==AA)ans=min(ans,C);
}
int main(){
AA=C=rd();
C=(ll)C*t5%MOD;
{
int Q=((ll)C*C-4)%MOD;
if(Q<0)Q+=MOD;
int R=F(Q);
if(~R){
int a=(ll)(C+(R))%MOD*i2%MOD;
if(a<0)a+=MOD;
int b=bsgs(A,a);
if(~b)Upd(b);
a=(ll)(C-(R))%MOD*i2%MOD;
if(a<0)a+=MOD;
b=bsgs(A,a);
if(~b)Upd(b);
}
}
nxt:
{
int Q=((ll)C*C+4)%MOD;
if(Q<0)Q+=MOD;
int R=F(Q);
if(~R){
int a=(ll)(C+(R))%MOD*i2%MOD;
if(a<0)a+=MOD;
int b=bsgs(A,a);
if(~b)Upd(b);
a=(ll)(C-(R))%MOD*i2%MOD;
if(a<0)a+=MOD;
b=bsgs(A,a);
if(~b)Upd(b);
}
}
nxt2:
if(ans!=inf)cout<<ans<<endl;
else cout<<-1<<endl;
//cerr<<clock()<<endl;
}

BZOJ 5104的更多相关文章

  1. BZOJ 5104 Fib数列(二次剩余+BSGS)

    斐波那契数列的通项: \[\frac{1}{\sqrt{5}}((\frac{1+\sqrt{5}}{2})-(\frac{1-\sqrt{5}}{2}))\] 设T=\(\sqrt{5}*N\),\ ...

  2. @bzoj - 5104@ Fib数列

    目录 @description@ @solution@ @accepted code@ @details@ @description@ Fib数列为1,1,2,3,5,8... 求在Mod10^9+9 ...

  3. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  4. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

  5. BZOJ 2879: [Noi2012]美食节

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1834  Solved: 969[Submit][Status] ...

  6. bzoj 4610 Ceiling Functi

    bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...

  7. BZOJ 题目整理

    bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...

  8. 【sdoi2013】森林 BZOJ 3123

    Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数.第三行包含N个非负整数 ...

  9. 【清华集训】楼房重建 BZOJ 2957

    Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...

随机推荐

  1. jmeter+maven+jenkins自动化接口测试(上)

    代码已上传git(包括调试的jmx,jmeter相关文件等):https://gitlab.com/yinzhenzhi/jmeterandmaven 目的:现在很多人都在做自动化接口的平台,我也正在 ...

  2. wiki中文语料的word2vec模型构建

    一.利用wiki中文语料进行word2vec模型构建 1)数据获取 到wiki官网下载中文语料,下载完成后会得到命名为zhwiki-latest-pages-articles.xml.bz2的文件,里 ...

  3. openJDK之如何下载各个版本的openJDK源码

    如果我们需要阅读openJDK的源码,那么需要下载,那么该去哪下载呢? 现在JDK已经发展到版本10了,11已经处于计划中,如果需要特定版本的openJDK,它们的下载链接在哪呢? 1.openJDK ...

  4. Mac 终端美化方法

    美化终端,主要是主题,字体,命令行提示3个方面. 主题 使用的主题是Solarized Dark主题. 安装主题: git clone git://github.com/altercation/sol ...

  5. Git——如何将本地项目提交至远程仓库(第一次)

    1.(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库. git init 2.把文件添加到版本库中,使用命令 git add .添加到暂存区里面去,不要忘记后面的小数 ...

  6. monkeyrunner环境配置

    1.安装JDK.android  SDK.Python (安装完成后,配置环境变量:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%ANDROID_HOME%\platfor ...

  7. 关于简单的安卓APP状态栏设置(类似沉浸式状态栏)

    1.设置为全屏模式: 在所需设置为全屏模式的逻辑的onCreat()方法中加入以下代码即可: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.K ...

  8. mysql查看实时连接数

    怎么实时查看mysql当前连接数 如何实时查看mysql当前连接数? 1.查看当前所有连接的详细资料:./mysqladmin -uadmin -p -h10.140.1.1 processlist ...

  9. Scrapy-redis 分布式

    分布式:架构方式 多台真实机器+爬虫(如requests,scrapy等)+任务共享中心 多台虚拟机器(或者部分虚拟部分真实)+爬虫(如requests,scrapy等)+任务共享中心 多台容器级虚拟 ...

  10. 进入django

    web应用,c/s,b/s架构 c/s: 客户端 服务端 b/s: 浏览器 服务器 HTTP协议: 超文本传输协议 四大特性: 1.基于TCP/IP作用在应用层之上的协议 2.基于请求响应 3.无状态 ...