分析:
矩阵快速幂求递推式 练模板//这里写代码片#include#include #include #define ll long longusing namespace std;ll n,p,f[20],a[20];int d;struct node{ ll H[20][20]; node operator *(const node &a) const { node ans; for (int i=1;i<=d;i++) for (int j=1;j<=d;j++) { ans.H[i][j]=0; for (int k=1;k<=d;k++) ans.H[i][j]=(ans.H[i][j]+H[i][k]*a.H[k][j]%p)%p; } return ans; } void clear() { memset(H,0,sizeof(H)); } node KSM(ll b) { node ans=(*this),a=(*this); b--; while (b) { if (b&1) ans=ans*a; b>>=1; a=a*a; } return ans; }};node ans,H;int main(){ scanf("%d%lld%lld",&d,&n,&p); while (d&&n&&p) { H.clear(); for (int i=1;i<=d;i++) scanf("%lld",&a[i]), H.H[i][1]=a[i]%p; for (int i=1;i<=d;i++) scanf("%lld",&f[i]); if (n<=d) { printf("%lld\n",f[n]%p); scanf("%d%lld%lld",&d,&n,&p); continue; } for (int i=1;i