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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

考研编程练习----递推数列(矩阵相乘法)

發(fā)布時(shí)間:2025/4/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 考研编程练习----递推数列(矩阵相乘法) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目描述:

給定a0,a1,以及an=p*a(n-1) + q*a(n-2)中的p,q。這里n >= 2。 求第k個(gè)數(shù)對10000的模。

輸入:

輸入包括5個(gè)整數(shù):a0、a1、p、q、k。

輸出:

第k個(gè)數(shù)a(k)對10000的模。

樣例輸入:
20 1 1 14 5
樣例輸出:
8359
經(jīng)典代碼:
#include <iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int a0,a1,p,q,k;
struct rec
{
? ? int a[2][2];
};
rec f(rec aa,rec bb)
{
? ? rec ret;
? ? ret.a[0][0]=(aa.a[0][0]*bb.a[0][0]+aa.a[0][1]*bb.a[1][0])%10000;
? ? ret.a[0][1]=(aa.a[0][0]*bb.a[0][1]+aa.a[0][1]*bb.a[1][1])%10000;
? ? ret.a[1][0]=(aa.a[1][0]*bb.a[0][0]+aa.a[1][1]*bb.a[1][0])%10000;
? ? ret.a[1][1]=(aa.a[1][0]*bb.a[0][1]+aa.a[1][1]*bb.a[1][1])%10000;
? ? return ret;
}
rec mul(rec aa,int??kk)
{
? ? rec ret;
? ? ret.a[0][0]=1;ret.a[0][1]=0;ret.a[1][0]=0;ret.a[1][1]=1;
? ? for(;kk;kk>>=1)
? ? {
? ?? ???if(kk&1)ret=f(ret,aa);
? ?? ???aa=f(aa,aa);
? ? }
? ? return ret;
}
int main()
{
? ? while(~scanf("%d%d%d%d%d",&a0,&a1,&p,&q,&k))
? ? {
? ?? ???if(k==0){printf("%d\n",a0);continue;}
? ?? ???else if(k==1){printf("%d\n",a1);continue;}
? ?? ???rec x;
? ?? ???x.a[0][0]=p;x.a[0][1]=1;x.a[1][0]=q;x.a[1][1]=0;
? ?? ???rec ans=mul(x,k-1);
? ?? ???printf("%d\n",(a1*ans.a[0][0]+a0*ans.a[1][0])%10000);
? ? }
? ? return 0;
}

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

總結(jié)

以上是生活随笔為你收集整理的考研编程练习----递推数列(矩阵相乘法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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