uva 10870 递推关系矩阵快速幂模
2013-09-04 15:52
281 查看
RecurrencesInput:standardinputOutput:standardoutput
Considerrecurrentfunctionsofthefollowingform:
f(n)=a1f(n-1)+a2f(n-2)+a3f(n-3)+...+adf(n-d),forn>d.a1,a2,...,ad-arbitraryconstants.
AfamousexampleistheFibonaccisequence,definedas:f(1)=1,f(2)=1,f(n)=f(n-1)+f(n-2).Hered=2,a1=1,a2=1.
Everysuchfunctioniscompletelydescribedbyspecifyingd(whichiscalledtheorderofrecurrence),valuesofdcoefficients:a1,a2,...,ad,andvaluesoff(1),f(2),...,f(d).You'llbegiventhesenumbers,andtwointegersnandm.Yourprogram'sjobistocomputef(n)modulom.
Input
Inputfilecontainsseveraltestcases.Eachtestcasebeginswiththreeintegers:d,n,m,followedbytwosetsofdnon-negativeintegers.Thefirstsetcontainscoefficients:a1,a2,...,ad.Thesecondsetgivesvaluesoff(1),f(2),...,f(d).
Youcanassumethat:1<=d<=15,1<=n<=231-1,1<=m<=46340.Allnumbersintheinputwillfitinsigned32-bitinteger.
Inputisterminatedbylinecontainingthreezeroesinsteadofd,n,m.Twoconsecutivetestcasesareseparatedbyablankline.
[align=center][/align]
题目大意:f(n)=a1*f(n-1)+a2*f(n-2)+.....+ad*f(n-d)
Considerrecurrentfunctionsofthefollowingform:
f(n)=a1f(n-1)+a2f(n-2)+a3f(n-3)+...+adf(n-d),forn>d.a1,a2,...,ad-arbitraryconstants.
AfamousexampleistheFibonaccisequence,definedas:f(1)=1,f(2)=1,f(n)=f(n-1)+f(n-2).Hered=2,a1=1,a2=1.
Everysuchfunctioniscompletelydescribedbyspecifyingd(whichiscalledtheorderofrecurrence),valuesofdcoefficients:a1,a2,...,ad,andvaluesoff(1),f(2),...,f(d).You'llbegiventhesenumbers,andtwointegersnandm.Yourprogram'sjobistocomputef(n)modulom.
Input
Inputfilecontainsseveraltestcases.Eachtestcasebeginswiththreeintegers:d,n,m,followedbytwosetsofdnon-negativeintegers.Thefirstsetcontainscoefficients:a1,a2,...,ad.Thesecondsetgivesvaluesoff(1),f(2),...,f(d).
Youcanassumethat:1<=d<=15,1<=n<=231-1,1<=m<=46340.Allnumbersintheinputwillfitinsigned32-bitinteger.
Inputisterminatedbylinecontainingthreezeroesinsteadofd,n,m.Twoconsecutivetestcasesareseparatedbyablankline.
Output
Foreachtestcase,printthevalueoff(n)(modm)onaseparateline.Itmustbeanon-negativeinteger,lessthanm.SampleInputOutputforSampleInput
11100 2 1 210100 11 11 3214748364712345 12345678012345 123 000 | 1 55 423 |
题目大意:f(n)=a1*f(n-1)+a2*f(n-2)+.....+ad*f(n-d)
#include<iostream>
#include<cstring>
#include<cstdio>
usingnamespacestd;
#defineMax20
typedeflonglongLL;
structMatrix
{
LLa[Max][Max];
intn;
};
MatrixMatrix_mult_mod(MatrixA,MatrixB,intm)
{
inti,j,k;
MatrixC;
C.n=A.n;
memset(C.a,0,sizeof(C.a));
for(i=1;i<=A.n;i++)
{
for(j=1;j<=A.n;j++)
{
for(k=1;k<=A.n;k++)
{
C.a[i][j]=(C.a[i][j]+A.a[i][k]*B.a[k][j])%m;
}
}
}
returnC;
}
MatrixMatrix_pow_mod(MatrixA,intn,intm)
{
Matrixt;
inti,j;
t.n=A.n;
memset(t.a,0,sizeof(t.a));
for(i=1;i<=A.n;i++)t.a[i][i]=1;
for(i=1;i<=A.n;i++)
for(j=1;j<=A.n;j++)
A.a[i][j]%=m;
while(n)
{
if(n&1)t=Matrix_mult_mod(t,A,m);
n>>=1;
A=Matrix_mult_mod(A,A,m);
}
returnt;
}
voiddeal(intd,intn,intm)
{
inti,j;
LLdd[Max],dd1[Max];
MatrixA;
A.n=d;
memset(A.a,0,sizeof(A.a));
for(i=1,j=2;j<=d;i++,j++)A.a[i][j]=1;
for(j=d,i=1;i<=d;i++,j--)scanf("%ll",&A.a[d][j]);
for(i=1;i<=d;i++)scanf("%ll",dd+i);
A=Matrix_pow_mod(A,n-d,m);
for(i=1;i<=d;i++)
{
dd1[i]=0;
for(j=1;j<=d;j++)
dd1[i]=(dd1[i]+A.a[i][j]*dd[j])%m;
}
printf("%ll\n",dd1[d]);
}
intmain()
{
intd,n,m;
while(scanf("%d%d%d",&d,&n,&m),d+n+m)
deal(d,n,m);
return0;
}
相关文章推荐
- UVA 10870 递推关系 矩阵快速幂
- 递推关系( Recurrences, UVa 10870)(矩阵快速幂)
- hdu 4602 递推关系矩阵快速幂模
- UVA10870递推关系(矩阵乘法)
- UVa 10870 - Recurrences (矩阵构造 矩阵快速幂)
- 【矩阵快速幂】Recurrences UVA - 10870
- UVA 10870 Recurrences(矩阵快速幂)
- UVA 10870 - Recurrences 矩阵快速幂
- UVA 10870 - Recurrences(矩阵快速幂)
- UVA 10870 Recurrences 矩阵快速幂
- uva10870 Recurrences矩阵快速幂
- UVa 10870 Recurrences / 矩阵快速幂
- 递推关系转矩阵快速幂
- UVA 10870 Recurrences 矩阵快速幂
- UVA 10870 - Recurrences 矩阵快速幂
- uva 10870 Recurrences(矩阵快速幂)
- uva 10870 - Recurrences(矩阵快速幂)
- UVa 10870 Recurrences (矩阵快速幂)
- 矩阵快速幂(递推关系,UVA 10870)
- UVA 10870 Recurrences 矩阵连乘 快速幂取模