SPOJ31428 FIBONOMIAL(斐波那契数列)
神鱼推题,必是好题。
前几天刚做过[BJOI2019]勘破神机,于是就会这题了。(BJ人民强啊……%鱼)
首先要求是
$$\sum\limits_{i=0}^nx^if_i$$
应该很明显能想到把 $f_i$ 写成通项公式。
$$f_i=\dfrac{1}{\sqrt{5}}((\dfrac{1+\sqrt{5}}{2})^i-(\dfrac{1-\sqrt{5}}{2})^i)$$
那么带进去:
$$\sum\limits_{i=0}^nx^i\dfrac{1}{\sqrt{5}}((\dfrac{1+\sqrt{5}}{2})^i-(\dfrac{1-\sqrt{5}}{2})^i)$$
$$\dfrac{1}{\sqrt{5}}\sum\limits_{i=0}^nx^i((\dfrac{1+\sqrt{5}}{2})^i-(\dfrac{1-\sqrt{5}}{2})^i)$$
$$\dfrac{1}{\sqrt{5}}(\sum\limits_{i=0}^nx^i(\dfrac{1+\sqrt{5}}{2})^i)-\sum\limits_{i=0}^nx^i(\dfrac{1-\sqrt{5}}{2})^i))$$
$$\dfrac{1}{\sqrt{5}}(\sum\limits_{i=0}^n(\dfrac{1+\sqrt{5}}{2}\times x)^i-\sum\limits_{i=0}^n(\dfrac{1-\sqrt{5}}{2}\times x)^i)$$
扩个系,变成等比数列求和,做完了。
(貌似 $\color{black}{I}\color{red}{tst}$ 大爷用的矩阵快速幂直接切掉了?还是人家神啊……)
复杂度 $O(T\log n)$。
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- const int mod=,inv2=,inv5=;
- #define FOR(i,a,b) for(int i=(a);i<=(b);i++)
- #define ROF(i,a,b) for(int i=(a);i>=(b);i--)
- #define MEM(x,v) memset(x,v,sizeof(x))
- inline ll read(){
- char ch=getchar();ll x=,f=;
- while(ch<'' || ch>'') f|=ch=='-',ch=getchar();
- while(ch>='' && ch<='') x=x*+ch-'',ch=getchar();
- return f?-x:x;
- }
- int t,x;
- ll n;
- inline int add(int x,int y){return x+y<mod?x+y:x+y-mod;}
- inline int sub(int x,int y){return x<y?x-y+mod:x-y;}
- inline int mul(int x,int y){return 1ll*x*y%mod;}
- inline int qpow(int a,int b){
- int ans=;
- for(;b;b>>=,a=mul(a,a)) if(b&) ans=mul(ans,a);
- return ans;
- }
- struct comp{
- int x,y;
- comp(int xx=,int yy=):x(xx),y(yy){}
- comp operator+(comp c){return comp(add(x,c.x),add(y,c.y));}
- comp operator-(comp c){return comp(sub(x,c.x),sub(y,c.y));}
- comp operator*(comp c){return comp(add(mul(x,c.x),mul(,mul(y,c.y))),add(mul(x,c.y),mul(y,c.x)));}
- comp inv(){
- int t=qpow(sub(mul(x,x),mul(,mul(y,y))),mod-);
- return comp(mul(x,t),sub(,mul(y,t)));
- }
- comp operator/(comp c){return *this*c.inv();}
- bool operator==(comp c){return x==c.x && y==c.y;}
- }A(inv2,inv2),B(inv2,mod-inv2),C(,inv5);
- inline comp qpow(comp a,ll b){
- comp ans(,);
- for(;b;b>>=,a=a*a) if(b&) ans=ans*a;
- return ans;
- }
- comp calc(comp x,ll n){
- if(x==comp(,)) return n+;
- return (comp(,)-qpow(x,n+))/(comp(,)-x);
- }
- int main(){
- t=read();
- while(t--){
- n=read();x=read()%mod;
- printf("%d\n",(C*(calc(A*comp(x,),n)-calc(B*comp(x,),n))).x);
- }
- }
SPOJ31428 FIBONOMIAL(斐波那契数列)的更多相关文章
- C#求斐波那契数列第30项的值(递归和非递归)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 斐波拉契数列加强版——时间复杂度O(1),空间复杂度O(1)
对于斐波拉契经典问题,我们都非常熟悉,通过递推公式F(n) = F(n - ) + F(n - ),我们可以在线性时间内求出第n项F(n),现在考虑斐波拉契的加强版,我们要求的项数n的范围为int范围 ...
- js中的斐波那契数列法
//斐波那契数列:1,2,3,5,8,13…… //从第3个起的第n个等于前两个之和 //解法1: var n1 = 1,n2 = 2; for(var i=3;i<101;i++){ var ...
- 剑指Offer面试题:8.斐波那契数列
一.题目:斐波那契数列 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项.斐波那契数列的定义如下: 二.效率很低的解法 很多C/C++/C#/Java语言教科书在讲述递归函数的时 ...
- 算法: 斐波那契数列C/C++实现
斐波那契数列: 1,1,2,3,5,8,13,21,34,.... //求斐波那契数列第n项的值 //1,1,2,3,5,8,13,21,34... //1.递归: //缺点:当n过大时,递归 ...
- 洛谷P1962 斐波那契数列 || P1349 广义斐波那契数列[矩阵乘法]
P1962 斐波那契数列 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数 ...
- Python递归及斐波那契数列
递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n,用函数 fact(n)表示,可 ...
- 简单Java算法程序实现!斐波那契数列函数~
java编程基础--斐波那契数列 问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 思路:可能出现的情况:(1) n=1 ,一种方法 ;(2)n=2 ...
- js 斐波那契数列(兔子问题)
对于JS初学者来说,斐波那契数列一直是个头疼的问题,总是理不清思路. 希望看完这篇文章之后会对你有帮助. 什么是斐波那契数列 : 答: 斐波那契数列,又称黄金分割数列.因数学家列昂纳多·斐波那契(Le ...
- 剑指offer三: 斐波拉契数列
斐波拉契数列是指这样一个数列: F(1)=1; F(2)=1; F(n)=F(n-1)+F(n); public class Solution { public int Fibonacci(int n ...
随机推荐
- 物联网架构成长之路(43)-k8s从入门到放弃
0. 前言 这段时间要入门一下CI/CD了,以前简单的了解过Jenkins,现在要把以下的这个图的架构搭建起来.国外可能一两个命令就安装完成的事情,我折腾了2天多,真的差点放弃了. 1. 安装Virt ...
- (二十)golang--变量的作用域
(1)函数内部申明/定义的变量叫局部变量,作用域仅限于函数的内部: (2)函数外部申明/定义的变量叫全局变量,作用域在整个包都有效,如果其首字母为大写,则作用域是整个程序: (3)如果变量是在一个代码 ...
- python3 消耗CPU的性能,使CPU满载(可以设置进程名称)
需要安装库:setproctitle 1.1.10,设置进程名称,测试操作系统centos 7.0 # -*- coding: utf-8 -*- from multiprocessing im ...
- 大话设计模式Python实现-观察者模式
观察者模式(发布-订阅模式 Publish Subscribe Pattern):定义了一种一对多的关系,让多个观察对象同时监听一个主题对象,当主题对象状态发生变化时会通知所有观察者,是它们能够自动更 ...
- CSS3 clip裁剪动画
CSS3 clip裁剪动画 下面是比较简单的例子 <pre><html><head><style type="text/css">i ...
- html点击弹出QQ添加好友的窗口
<a href="tencent://AddContact/?fromId=50&fromSubId=1&subcmd=all&uin=1377732948&q ...
- windows上mysql解压缩版本、centos上rpm方式的安装、初始化等
一.windows版本: https://dev.mysql.com/doc/refman/5.7/en/windows-install-archive.html 启动或者暂停mysql服务: htt ...
- 一个简单的利用 WebClient 异步下载的示例(三)
继续上一篇 一个简单的利用 WebClient 异步下载的示例(二) 后,继续优化它. 1. 直接贴代码了: DownloadEntry: public class DownloadEntry { p ...
- RocketMQ多master多salve集群搭建
一.RocketMQ集群模式简介 单Master方式 风险比较大, 一旦Broker重启或者宕机, 将导致整个环境不可用, 不建议线上使用. 多Master模式 一个集群中没有slave, 全是mas ...
- Asp.netCore 3.0 Web 实现Oauth2.0微信授权登陆的测试
1:Oauth2.0授权的流程截图 官方流程如下: 1 第一步:用户同意授权,获取code 2 第二步:通过code换取网页授权access_token 3 第三步:刷新access_token(如果 ...