BZOJ5118: Fib数列2
这个2比1简单吧..
P−−√\sqrt P判一下发现模数是个质数
因为有这个公式Fn=15√[(1+5√2)n−(1−5√2)n]Fn=\dfrac{1}{\sqrt5}[(\frac{1+\sqrt5}{2})^n-(\frac{1-\sqrt5}{2})^n]
用二次剩余弄出在模这个质数下的5√\sqrt5,令A=1+5√2,B=1−5√2A=\frac{1+\sqrt5}{2},B=\frac{1-\sqrt5}{2}
就是求t(AN−BN)t(A^N-B^N),N=2nN=2^n
NN显然与PP互质,套个费马小定理直接快速幂就好了
code:
#include<set>
#include<map>
#include<deque>
#include<queue>
#include<stack>
#include<cmath>
#include<ctime>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<climits>
#include<complex>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;ll mul(ll a,ll b,ll mod)
{ll re=0;for(;b;b>>=1,a=(a+a)%mod) if(b&1)re=(re+a)%mod;return re;
}
ll pw(ll x,ll k,ll mod)
{ll re=1ll;for(;k;k>>=1,x=mul(x,x,mod)) if(k&1ll)re=mul(re,x,mod);return re;
}
ll sqr(ll x,ll mod){return mul(x,x,mod);}
const ll mod = 1125899839733759;struct E
{ll a,b,cn;friend inline E operator *(const E &x,const E &y){return (E){(mul(x.a,y.a,mod)+mul(mul(x.b,y.b,mod),x.cn,mod))%mod,(mul(x.b,y.a,mod)+mul(x.a,y.b,mod))%mod,x.cn};}
};
struct Get_Sqrt
{ll alpha,alphan;ll f(ll x){return pw(x,(mod-1)>>1,mod);}ll pw2(E x,ll k){E re=(E){1,0,alphan};for(;k;k>>=1,x=x*x) if(k&1ll)re=re*x;return re.a;}ll solve(ll n){if(!n) return 0;if(f(n)==mod-1) return -1;alpha=0;while(!alpha){ll cc=mul(rand(),rand(),mod),cn=(sqr(cc,mod)-n+mod)%mod;if(f(cn)==mod-1) alpha=cc,alphan=cn;}E x=(E){alpha,1,alphan};return pw2(x,(mod+1)>>1);}
}Sqrt;ll s5,invs5,inv2=(mod+1ll)>>1,A,B;
ll n;int main()
{//freopen("tmp.in","r",stdin);//freopen("tmp.out","w",stdout);srand(23333333);s5=Sqrt.solve(5); invs5=pw(s5,mod-2,mod);A=mul((s5+1),inv2,mod);B=mod-pw(A,mod-2,mod);int tcase; scanf("%d",&tcase);while(tcase--){scanf("%lld",&n); n=pw(2,n,mod-1);ll re=(pw(A,n,mod)-pw(B,n,mod)+mod)%mod;re=mul(re,invs5,mod);printf("%lld\n",re);}return 0;
}
BZOJ5118: Fib数列2相关推荐
- 【牛客 - 280A】勘测(fib数列,思维,打表)
题干: Actci偶然发现了一个矿洞,这个矿洞的结构类似与一棵二叉树,Actci发现的矿洞恰好位于根节点处,为了尽快挖掘,Actci找来了她的小伙伴们来帮忙,由于地质原因,每天小伙伴们只能打通到一条到 ...
- 【CodeForces - 633D】Fibonacci-ish (离散化,暴力枚举+STPmap,fib数列收敛性质)
题干: Yash has recently learnt about the Fibonacci sequence and is very excited about it. He calls a s ...
- [每日一题] 66. 客似云来(fib数列公式)
1. 题目来源 链接:客似云来 来源:牛客网 2. 题目说明 NowCoder开了一家早餐店,这家店的客人都有个奇怪的癖好:他们只要来这家店吃过一次早餐,就会每天都过来:并且,所有人在这家店吃了两天早 ...
- BZOJ5104 Fib数列 二次剩余、BSGS
传送门 发现只有通项公式可以解决考虑通项公式 \(F_n = \frac{1}{\sqrt{5}}((\frac{1+\sqrt{5}}{2})^n - (\frac{1-\sqrt{5}}{2})^ ...
- hdu 4549 M斐波那契数列(费马小定理 + 二分快速幂 + 矩阵快速幂)
M斐波那契数列 Time Limit: 3000/1 ...
- 基于Cache的Fibonacci数列的计算
这个数列在编写程序的过程中,应该被无数次提起,今天再次提起,作为动态规划的一个引入. 动态规划被人总结为: 递推 + Cache 而使用Cache方式的Fib数列计算也是很酷的.代码非常简洁,但是如果 ...
- hdu 3221 Brute-force Algorithm(高速幂取模,矩阵高速幂求fib)
http://acm.hdu.edu.cn/showproblem.php?pid=3221 一晚上搞出来这么一道题..Mark. 给出这么一个程序.问funny函数调用了多少次. 我们定义数组为所求 ...
- 优美的数列(斐波那契数列)
斐波那契数列是一个十分玄妙的数列,为什么说它是优美的呢?原因在于我们可以利用斐波那契数列画出拥有最美比例的黄金比例长方形,对于该数列的本质是利用动态规划的思想来得到的. 数列大致为1,1,2,3,5, ...
- 关于斐波那契数列那些事儿~
斐波那契数列 C语言中:FIB数列 中文名:斐波那契数列 别名:黄金分割数列,兔子数列 该数列:0.1.1.2.3.5.8.13- 斐波那契数列以如下被以递推的方法定义: F (0)=0 F (1)= ...
- 青蛙跳台阶:我如何得知它是一道斐波那契数列题?——应用题破题“三板斧”
本文以C语言实现. 目录 前言 一.斐波那契阿数列基础知识 二.引例:青蛙跳台阶 三.破题分析:举例归纳 1. 三板斧的使用 举例 模拟(必要时画图) 找规律 2. 代码展示 四.拓展用例:矩形覆盖问 ...
最新文章
- Java记录 -62- java.util.Collections
- Thinkphp 源码分析
- linux内核如何安装vim,如何在Linux 中安装和使用 PacVim?
- 《CSS揭秘》-背景与边框
- 【机器学习】从Few-shot Learning再次认识机器学习
- 解决阿里云服务器磁盘报警
- HDU - 5878 A - I Count Two Three H 技巧枚举
- win上部署基于openvino2020.2的yolov5算法
- Facebook开发地面技术扩大互联网连接
- Oracle存储过程异常
- python读取fiddler_Python3.x+Fiddler抓取APP数据
- C语言笔试题2022
- 让IPFS星际文件系统永久保存你的数据
- 制作你软盘镜像_codestorm_新浪博客
- php+剧影评系统 毕业设计-附源码140859
- 阴阳师服务器在维护,《阴阳师》12月1日服务器维护公告
- Mac自定义触控栏 Touch Bar的显示教程
- VMware虚拟机与物理机网络互通
- Element ui 中的tree 在数据前面添加自定义图标
- Python安装库的常用方法