BZOJ 5104
这个模数比较有趣
可以求出 $\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的更多相关文章
- BZOJ 5104 Fib数列(二次剩余+BSGS)
斐波那契数列的通项: \[\frac{1}{\sqrt{5}}((\frac{1+\sqrt{5}}{2})-(\frac{1-\sqrt{5}}{2}))\] 设T=\(\sqrt{5}*N\),\ ...
- @bzoj - 5104@ Fib数列
目录 @description@ @solution@ @accepted code@ @details@ @description@ Fib数列为1,1,2,3,5,8... 求在Mod10^9+9 ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
- BZOJ 3275: Number
3275: Number Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 874 Solved: 371[Submit][Status][Discus ...
- BZOJ 2879: [Noi2012]美食节
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1834 Solved: 969[Submit][Status] ...
- bzoj 4610 Ceiling Functi
bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...
- BZOJ 题目整理
bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...
- 【sdoi2013】森林 BZOJ 3123
Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数.第三行包含N个非负整数 ...
- 【清华集训】楼房重建 BZOJ 2957
Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...
随机推荐
- HDU2859 Phalanx (动态规划)
Today is army day, but the servicemen are busy with the phalanx for the celebration of the 60th anni ...
- LFYZ-OJ ID: 1008 求A/B高精度值
思路 小数点前的部分可以通过m/n直接计算得出 小数点后的20位可通过循环进行快速计算,计算方法如下: m%=n m*=10 小数点后第i位为m/n,回到第1步 第3步后,如果m%n为0,说明已经除净 ...
- react中input自动聚焦问题
input自动聚焦问题 在react中可以使用refs解决这个问题,首先看一下refs的使用场景: (1)处理焦点.文本选择或媒体控制. (2)触发强制动画. (3)集成第三方 DOM 库. 使用re ...
- LeetCode 第五题 最长的回文字符串 (JAVA)
Longest Palindromic Substring 简介:字符串中最长的回文字符串 回文字符串:中心对称的字符串 ,如 mom,noon 问题详解: 给定一个字符串s,寻找字符串中最长的回文字 ...
- Sublime text3 连接sftp/ftp(远程服务器)
1.按下Ctrl + Shift + P调出命令面板2.在输入框中输入Sftp,按回车下载3.建一个新的文件夹放到左边的项目栏中4.右击文件夹,选中SFTP/FTP,点击Map to Remote5. ...
- 华为交换机配置stelnet登陆的实例
作者:邓聪聪 为满足等堡安全要求,对测评对象的交换机做安全登陆的限制 :开启ssh的服务 stelnet server enable :#创建认证用户的用户名和密码 aaa local-user te ...
- jqGrid合并单元格
两个参数 /**合并单元格:合并指定 gridName表格的NoName 列,合并的标准是参考CellName+CellNameTwo列内单元格的值. * gridName :表格名称 * NoNam ...
- springboot配置详解
springboot配置详解 Author:SimpleWu properteis文件属性参考大全 springboot默认加载配置 SpringBoot使用两种全局的配置文件,全局配置文件可以对一些 ...
- Excel VBA入门(8): 代码调试/错误处理/代码优化
VBE有丰富的调试工具, 比如立即窗口, 本地窗口, 监视窗口, 断点调试... 第一个博文中已经讲过调试的基本操作: 设置断点, F5运行, F8逐条运行 断点就是程序中暂停停止运行的位置, 设置断 ...
- Java设计模式迭代器
定义:提供一种方法,顺序访问一个集合对象中的各个元素,而又不暴露该对象的内部表示. 类型:行为型 适用场景: 访问一个集合对象的内容而无需暴露它的内部表示 为遍历不同的集合结构提供一个统一的接口 优点 ...