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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

UVA10870递推关系(矩阵乘法)

發布時間:2025/6/17 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UVA10870递推关系(矩阵乘法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:
? ? ? 給以個遞推f(n) = a1 f(n - 1) + a2 f(n - 2) + a3 f(n - 3) + ... + ad f(n - d), for n > d.,給你n,d,a1,a2..ad ,f[1],f[2]..f[d],讓你求f[n]%m.


思路:
? ? ? 比較基礎的矩陣題目,每次都構造一個d*d的矩陣,然后用快速冪求出來它的n-1次冪,然后在求出乘積就行了,簡單構造,沒有什么坑點。
? ? ? ? ??




#include<stdio.h>
#include<string.h>


typedef struct
{
? ?long long Mat[16][16];
}MAT;


long long n ,MOD ,d;


MAT mm(MAT a ,MAT b)
{
? ?MAT c;
? ?memset(c.Mat ,0 ,sizeof(c.Mat));
? ?for(int i = 1 ;i <= d ;i ++)
? ?for(int j = 1 ;j <= d ;j ++)
? ?for(int k = 1 ;k <= d ;k ++)
? ?c.Mat[i][j] = (c.Mat[i][j] + a.Mat[i][k] * b.Mat[k][j])%MOD;
? ?return c;
}


MAT Quick(MAT a ,long long b)
{
? ?MAT c;
? ?memset(c.Mat ,0 ,sizeof(c.Mat));
? ?for(int i = 1 ;i <= d ;i ++)
? ?c.Mat[i][i] = 1;
? ?while(b)
? ?{
? ? ? if(b&1) c = mm(c ,a);
? ? ? a = mm(a ,a);
? ? ? b>>=1;
? ?}
? ?return c;
}


int main ()
{
? ?long long D[16] ,F[16] ,i;
? ?MAT A;
? ?while(~scanf("%lld %lld %lld" ,&d ,&n ,&MOD) && d + n + MOD)
? ?{
? ? ? for(i = 1 ;i <= d ;i ++)?
? ? ? {
? ? ? ? ?scanf("%lld" ,&D[i]);
? ? ? ? ?D[i] %= MOD;
? ? ? }
? ? ? for(i = 1 ;i <= d ;i ++)?
? ? ? {
? ? ? ? ?scanf("%lld" ,&F[i]);
? ? ? ? ?F[i] %= MOD;
? ? ? }
? ? ? if(n <= d)
? ? ? {
? ? ? ? ?printf("%lld\n" ,F[n]);
? ? ? ? ?continue;
? ? ? }
? ? ? memset(A.Mat ,0 ,sizeof(A.Mat));
? ? ? int x = 2 ,y = 1;
? ? ? for(i = 2 ;i <= d ;i ++)
? ? ? {
? ? ? ? ?A.Mat[x][y] = 1;
? ? ? ? ?x ++ ,y ++;
? ? ? }
? ? ? for(i = 1 ;i <= d ;i ++)
? ? ? A.Mat[i][d] = D[d-i+1];
? ? ??
? ? ??
? ? ? A = Quick(A ,n - 1);
? ? ? long long Ans = 0;
? ? ? for(i = 1 ;i <= d ;i ++)
? ? ? {
? ? ? ? ?Ans += F[i] * A.Mat[i][1];
? ? ? ? ?Ans %= MOD;
? ? ? }
? ? ? printf("%lld\n" ,Ans);
? ?}
? ?return 0;
}
? ? ??
? ? ??
? ? ??
? ? ??
? ? ??
? ? ??
? ? ??
? ? ??
? ?
? ?
? ?
? ?





總結

以上是生活随笔為你收集整理的UVA10870递推关系(矩阵乘法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。