日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

51nod1236 序列求和 V3

發(fā)布時間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 51nod1236 序列求和 V3 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這題炒雞簡單,只要第一步想對了后面順風(fēng)順?biāo)甉WQ(然鵝我沒想到)

前置芝士:

  • 斐波那契數(shù)列通項(xiàng)公式

  • 等比數(shù)列求和公式

  • 二項(xiàng)式定理

  • 這題要求的就是 \(\sum_{i=1}^n Fib(i)^k\) ,其中 Fib 就是斐波那契數(shù)列

    如果說沒有 k 的話怎么做?仍然不會.jpg

    于是我們直接想帶 k 的答案吧...

    我們考慮 把斐波那契數(shù)列的通項(xiàng)公式帶進(jìn)去

    然后鬼都知道怎么做了,就是一堆化式子:

    \[\begin{aligned}ANS=& \sum_{i=1}^n Fib(i)^k\\=& \sum_{i=1}^{n} \Big({ {(1+\sqrt 5 )^i\over2 } -{(1-\sqrt 5)^i \over 2} \over \sqrt 5} \Big)^k \\=& \big({1\over \sqrt 5}\big)^k \sum_{i=1}^{n}\sum_{j=0}^k (-1)^{k-j} \begin{pmatrix} k\\j \end{pmatrix}\Big( {1+\sqrt 5 \over2 }\Big)^{ij} \Big( {1-\sqrt 5 \over2 }\Big)^{i(k-j)} \\=& \big({1\over \sqrt 5}\big)^k\sum_{j=0}^k (-1)^{k-j} \begin{pmatrix} k\\j \end{pmatrix} \sum_{i=1}^{n} \Big( \big( {1+\sqrt 5 \over2 }\big)^j \big( {1-\sqrt 5 \over2 }\big)^{k-j} \Big)^i \end{aligned}\]

    注意公式后面的部分可套等比數(shù)列公式,然后 快速模 求解...

    于是我們只要預(yù)處理一下階乘 以及 \(({1+\sqrt 5\over 2})^i\) 、 \(({1-\sqrt 5\over 2})^i\) ,就可以 \(O(k)\) 時間內(nèi)線性求解了,并且總復(fù)雜度也是 \(O(k)\) (當(dāng)然,不算快速冪的話 XD)

    code

    不知道打的什么鬼東西巨丑無比...

    //by Judge #include<cstdio> #include<cstring> #include<iostream> #define Rg register #define fp(i,a,b) for(Rg int i=(a),I=(b)+1;i<I;++i) #define fd(i,a,b) for(Rg int i=(a),I=(b)-1;i>I;--i) #define ll long long using namespace std; const int s5=383008016; const int mod=1e9+9; const int M=1e5+3; typedef int arr[M]; #ifndef Judge #define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++) #endif char buf[1<<21],*p1=buf,*p2=buf; inline int MO(ll x){return x-x/mod*mod;} inline int mul(int x,int y){return MO(1ll*x*y);} inline int dec(int x,int y){return x<y?x-y+mod:x-y;} inline int inc(int x,int y){return x+y>=mod?x+y-mod:x+y;} inline ll read(){ ll x=0,f=1; char c=getchar();for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f; } char sr[1<<21],z[20];int CCF=-1,Z; inline void Ot(){fwrite(sr,1,CCF+1,stdout),CCF=-1;} inline void print(int x,char chr='\n'){if(CCF>1<<20)Ot();if(x<0)sr[++CCF]=45,x=-x;while(z[++Z]=x%10+48,x/=10);while(sr[++CCF]=z[Z],--Z);sr[++CCF]=chr; } ll n; int k,t,MX=1e5,tmp,ans,inv[1000003]; arr fac,ifac,v1,v2; inline void prep(Rg int n){v1[0]=v2[0]=fac[0]=fac[1]=inv[0]=inv[1]=ifac[0]=ifac[1]=1;fp(i,2,n) inv[i]=mul(mod-mod/i,inv[mod%i]);fp(i,2,n) fac[i]=mul(fac[i-1],i),ifac[i]=mul(ifac[i-1],inv[i]);v1[1]=mul(s5+1,inv[2]),v2[1]=mul(mod+1-s5,inv[2]);fp(i,2,n) v1[i]=mul(v1[i-1],v1[1]),v2[i]=mul(v2[i-1],v2[1]);fp(i,n+1,MX=5e5) inv[i]=mul(mod-mod/i,inv[mod%i]); } inline int qpow(int x,ll p=mod-2,int s=1){for(;p;p>>=1,x=mul(x,x)) if(p&1) s=mul(s,x); return s; } inline int Inv(int x){return x<=MX?inv[x]:mul(mod-mod/x,Inv(mod%x));} inline int C(int n,int m){return mul(fac[n],mul(ifac[m],ifac[n-m]));} int main(){ prep(MX); int T=read(); ll t,tmp,ans,n,k;for(;T;--T){ n=read(),k=read(),ans=0;fp(j,0,k){ t=mul(v1[j],v2[k-j]),tmp=t==1?n%mod:mul(dec(qpow(t,n+1),t),Inv(t-1));tmp=mul(tmp,C(k,j)),ans=(k^j)&1?dec(ans,tmp):inc(ans,tmp);} print(mul(ans,qpow(s5,(1ll*k*(mod-2)%(mod-1)+mod-1))));} return Ot(),0; }

    轉(zhuǎn)載于:https://www.cnblogs.com/Judge/p/10731573.html

    總結(jié)

    以上是生活随笔為你收集整理的51nod1236 序列求和 V3的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。