神鱼推题,必是好题。

前几天刚做过[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)$。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int mod=,inv2=,inv5=;
  5. #define FOR(i,a,b) for(int i=(a);i<=(b);i++)
  6. #define ROF(i,a,b) for(int i=(a);i>=(b);i--)
  7. #define MEM(x,v) memset(x,v,sizeof(x))
  8. inline ll read(){
  9. char ch=getchar();ll x=,f=;
  10. while(ch<'' || ch>'') f|=ch=='-',ch=getchar();
  11. while(ch>='' && ch<='') x=x*+ch-'',ch=getchar();
  12. return f?-x:x;
  13. }
  14. int t,x;
  15. ll n;
  16. inline int add(int x,int y){return x+y<mod?x+y:x+y-mod;}
  17. inline int sub(int x,int y){return x<y?x-y+mod:x-y;}
  18. inline int mul(int x,int y){return 1ll*x*y%mod;}
  19. inline int qpow(int a,int b){
  20. int ans=;
  21. for(;b;b>>=,a=mul(a,a)) if(b&) ans=mul(ans,a);
  22. return ans;
  23. }
  24. struct comp{
  25. int x,y;
  26. comp(int xx=,int yy=):x(xx),y(yy){}
  27. comp operator+(comp c){return comp(add(x,c.x),add(y,c.y));}
  28. comp operator-(comp c){return comp(sub(x,c.x),sub(y,c.y));}
  29. 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)));}
  30. comp inv(){
  31. int t=qpow(sub(mul(x,x),mul(,mul(y,y))),mod-);
  32. return comp(mul(x,t),sub(,mul(y,t)));
  33. }
  34. comp operator/(comp c){return *this*c.inv();}
  35. bool operator==(comp c){return x==c.x && y==c.y;}
  36. }A(inv2,inv2),B(inv2,mod-inv2),C(,inv5);
  37. inline comp qpow(comp a,ll b){
  38. comp ans(,);
  39. for(;b;b>>=,a=a*a) if(b&) ans=ans*a;
  40. return ans;
  41. }
  42. comp calc(comp x,ll n){
  43. if(x==comp(,)) return n+;
  44. return (comp(,)-qpow(x,n+))/(comp(,)-x);
  45. }
  46. int main(){
  47. t=read();
  48. while(t--){
  49. n=read();x=read()%mod;
  50. printf("%d\n",(C*(calc(A*comp(x,),n)-calc(B*comp(x,),n))).x);
  51. }
  52. }

SPOJ31428 FIBONOMIAL(斐波那契数列)的更多相关文章

  1. C#求斐波那契数列第30项的值(递归和非递归)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. 斐波拉契数列加强版——时间复杂度O(1),空间复杂度O(1)

    对于斐波拉契经典问题,我们都非常熟悉,通过递推公式F(n) = F(n - ) + F(n - ),我们可以在线性时间内求出第n项F(n),现在考虑斐波拉契的加强版,我们要求的项数n的范围为int范围 ...

  3. js中的斐波那契数列法

    //斐波那契数列:1,2,3,5,8,13…… //从第3个起的第n个等于前两个之和 //解法1: var n1 = 1,n2 = 2; for(var i=3;i<101;i++){ var ...

  4. 剑指Offer面试题:8.斐波那契数列

    一.题目:斐波那契数列 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项.斐波那契数列的定义如下: 二.效率很低的解法 很多C/C++/C#/Java语言教科书在讲述递归函数的时 ...

  5. 算法: 斐波那契数列C/C++实现

    斐波那契数列: 1,1,2,3,5,8,13,21,34,....     //求斐波那契数列第n项的值 //1,1,2,3,5,8,13,21,34... //1.递归: //缺点:当n过大时,递归 ...

  6. 洛谷P1962 斐波那契数列 || P1349 广义斐波那契数列[矩阵乘法]

    P1962 斐波那契数列 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数 ...

  7. Python递归及斐波那契数列

    递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n,用函数 fact(n)表示,可 ...

  8. 简单Java算法程序实现!斐波那契数列函数~

    java编程基础--斐波那契数列 问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 思路:可能出现的情况:(1) n=1 ,一种方法 ;(2)n=2 ...

  9. js 斐波那契数列(兔子问题)

    对于JS初学者来说,斐波那契数列一直是个头疼的问题,总是理不清思路. 希望看完这篇文章之后会对你有帮助. 什么是斐波那契数列 : 答: 斐波那契数列,又称黄金分割数列.因数学家列昂纳多·斐波那契(Le ...

  10. 剑指offer三: 斐波拉契数列

    斐波拉契数列是指这样一个数列: F(1)=1; F(2)=1; F(n)=F(n-1)+F(n); public class Solution { public int Fibonacci(int n ...

随机推荐

  1. 物联网架构成长之路(43)-k8s从入门到放弃

    0. 前言 这段时间要入门一下CI/CD了,以前简单的了解过Jenkins,现在要把以下的这个图的架构搭建起来.国外可能一两个命令就安装完成的事情,我折腾了2天多,真的差点放弃了. 1. 安装Virt ...

  2. (二十)golang--变量的作用域

    (1)函数内部申明/定义的变量叫局部变量,作用域仅限于函数的内部: (2)函数外部申明/定义的变量叫全局变量,作用域在整个包都有效,如果其首字母为大写,则作用域是整个程序: (3)如果变量是在一个代码 ...

  3. python3 消耗CPU的性能,使CPU满载(可以设置进程名称)

    需要安装库:setproctitle    1.1.10,设置进程名称,测试操作系统centos 7.0 # -*- coding: utf-8 -*- from multiprocessing im ...

  4. 大话设计模式Python实现-观察者模式

    观察者模式(发布-订阅模式 Publish Subscribe Pattern):定义了一种一对多的关系,让多个观察对象同时监听一个主题对象,当主题对象状态发生变化时会通知所有观察者,是它们能够自动更 ...

  5. CSS3 clip裁剪动画

    CSS3 clip裁剪动画 下面是比较简单的例子 <pre><html><head><style type="text/css">i ...

  6. html点击弹出QQ添加好友的窗口

    <a href="tencent://AddContact/?fromId=50&fromSubId=1&subcmd=all&uin=1377732948&q ...

  7. windows上mysql解压缩版本、centos上rpm方式的安装、初始化等

    一.windows版本: https://dev.mysql.com/doc/refman/5.7/en/windows-install-archive.html 启动或者暂停mysql服务: htt ...

  8. 一个简单的利用 WebClient 异步下载的示例(三)

    继续上一篇 一个简单的利用 WebClient 异步下载的示例(二) 后,继续优化它. 1. 直接贴代码了: DownloadEntry: public class DownloadEntry { p ...

  9. RocketMQ多master多salve集群搭建

    一.RocketMQ集群模式简介 单Master方式 风险比较大, 一旦Broker重启或者宕机, 将导致整个环境不可用, 不建议线上使用. 多Master模式 一个集群中没有slave, 全是mas ...

  10. Asp.netCore 3.0 Web 实现Oauth2.0微信授权登陆的测试

    1:Oauth2.0授权的流程截图 官方流程如下: 1 第一步:用户同意授权,获取code 2 第二步:通过code换取网页授权access_token 3 第三步:刷新access_token(如果 ...