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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

HDU - 4565 So Easy!(共轭构造+推公式+矩阵快速幂)

發(fā)布時間:2024/4/11 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU - 4565 So Easy!(共轭构造+推公式+矩阵快速幂) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目鏈接:點擊查看

題意:給出a,b,m,n,求

解析:題意一目了然,此題的關(guān)鍵是推出解決問題的公式。

首先,題目要求括號內(nèi)n次方后向上取整再模m,而這里給到的a與b的關(guān)系接下來也會用到:<b<

我們按照共軛構(gòu)造的形式,構(gòu)造出=,=

再設(shè)=+,由于共軛的性質(zhì),易知為整數(shù),又因為<b<,得到0<<1,所以0<<1,題目中要求的向上取整所得的整數(shù)即為

此時已經(jīng)將題目轉(zhuǎn)化為了求對m取余的結(jié)果了,接下來就應(yīng)該著手求Cn的表達式了,我們要盡可能使用假設(shè)的共軛關(guān)系:

即+=(A+B)(A-B),開始推導(dǎo):


首先=+

  • =*+*?
  • (a*a-b)=*+*
  • 上面兩個式子作差,可以再將Cn帶入,可以直接推得

    =2*a*+(b-)*

    =2*a*+(b-)*

    這個時候就可以構(gòu)造矩陣了

    然后直接矩陣快速冪就可以解決問題了。

    注意:(b-)可能是負數(shù),所以快速冪在處理的時候需要先加再模,注意對負數(shù)的處理。

    上代碼:

    #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<stack> #include<queue> #include<map> #include<sstream> #include<cmath> using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=2;LL mod;struct M {LL a[N][N]; };M operator*(M a,M b) {M temp;memset(temp.a,0,sizeof(temp.a));for(LL i=0;i<N;i++)for(LL j=0;j<N;j++){temp.a[i][j]=0;for(LL k=0;k<N;k++){temp.a[i][j]=(temp.a[i][j]+((a.a[i][k]*b.a[k][j])%mod+mod)%mod)%mod;}}return temp; } M q_pow(M a,LL n) {M ans;memset(ans.a,0,sizeof(ans.a));for(LL i=0;i<N;i++)ans.a[i][i]=1;while(n){if(n&1)ans=ans*a;a=a*a;n>>=1;}return ans; }int main() { // freopen("input.txt","r",stdin);LL a,b,m,n;while(scanf("%lld%lld%lld%lld",&a,&b,&n,&m)!=EOF){if(n==1){cout<<2*a%m<<endl;continue;}mod=m;M start;start.a[1][1]=0;start.a[0][0]=2*a;start.a[1][0]=b-a*a;start.a[0][1]=1;M ans;memset(ans.a,0,sizeof(ans.a));ans.a[0][0]=2*a;ans.a[0][1]=2;M res=q_pow(start,n-1);cout<<((ans*res).a[0][0]+mod)%mod<<endl; /* M temp=q_pow(start,2);temp=ans*temp;for(int i=0;i<N;i++){for(int j=0;j<N;j++)cout<<temp.a[i][j]<<' ';cout<<endl;}*/}return 0; }

    ?

    總結(jié)

    以上是生活随笔為你收集整理的HDU - 4565 So Easy!(共轭构造+推公式+矩阵快速幂)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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