數學作業
solution:
設fi表示1~i構成的數除以m的餘數,記x為i的位數。
不難寫出遞推式:
\[f_i=(f_*10^x+i)\ mod\ m
\]但是線性的遞推顯然會tle,所以考慮優化。
注意到x最大只能到18,所以可以把轉移過程分成18段,這樣每一段的x都相等
那麼就可以利用矩陣快速冪加速遞推了。
若狀態矩陣為:
\[\left[\begin
f_i&i+1&1
\end
\right]
\]轉移矩陣應為:
\[10^x & 0 & 0\\
1 & 1 & 0\\
0 & 1 & 1
\end
\right]}
\]code:
#include#include#include#include#include#define rg register
#define il inline
#define int unsigned long long
#define db double
using namespace std;
il int gi()
while(ch>='0'&&ch<='9') x=x*10+(ch^48),ch=getchar();
return w?-x:x;
}int n,mod;
struct matrix
il void newmt()
matrix operator *(const matrix &s)
}f,g;
il matrix qpow(matrix x,int p)
signed main()
g.mt[1][1]=g.mt[1][1]*10%mod;
f=f*qpow(g,n-(int)pow(10,cnt-1)+1);
printf("%llu\n",f.mt[1][1]);
return 0;
}
數學 快速冪與矩陣快速冪
二進位製取冪的想法是,我們將取冪的任務按照指數的 二進位制表示 來分割成更小的任務 快速冪的遞迴版本 long long fastpower long long a,long long b while迴圈版本 相對於原來的遞迴版本更快 解決你的tle long long fastpower long...
數學 快速冪與矩陣快速冪
1.a sequence of numbers 題目 題解 這是一道隱藏的快速冪的模板題,從資料我們就可以知道。對該題進行分析,如何判別是等差or等比,通過比較a 2 a 1 a 3 a 2 如果相等,則為等差 否則a 2 a 1 a 3 a 2 就為等比,然後利用快速冪來解決等比。includeu...
矩陣快速冪優化遞推式
文章原位址 第一行第一列元素為第乙個矩陣的第一行的每個元素和第二個矩陣的第一列的每個元素乘積的和 以此類推 第i行第j列的元素就是第乙個矩陣的第i行的每個元素與第二個矩陣第j列的每個元素的乘積的和。單位矩陣 n n的矩陣 mat i i 1 任何乙個矩陣乘以單位矩陣就是它本身 n 單位矩陣 n,可以...