51nod 求递推序列的第N项(矩阵快速幂、模拟求循环长度)
2017-10-14 11:11
387 查看
Description
有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.给出A,B和N,求f(n)的值。
Input
输入3个数:A,B,N。数字之间用空格分割。(-10000 <= A, B <= 10000, 1 <= N <= 10^9)Output
输出f(n)的值。Input示例
3 -1 5
Output示例
6
代码实现
//矩阵快速幂 #include<bits/stdc++.h> using namespace std; int matrix[2][2]; int ans[2][2]; void quick_pow(int nn) { int v1,v2,v3,v4; ans[0][0]=1; ans[0][1]=0; ans[1][0]=0; ans[1][1]=1; while(nn>0) { if(nn%2) { v1=((ans[0][0]*matrix[0][0]+ans[0][1]*matrix[1][0])%7+7)%7; v2=((ans[0][0]*matrix[0][1]+ans[0][1]*matrix[1][1])%7+7)%7; v3=((ans[1][0]*matrix[0][0]+ans[1][1]*matrix[1][0])%7+7)%7; v4=((ans[1][0]*matrix[0][1]+ans[1][1]*matrix[1][1])%7+7)%7; ans[0][0]=v1,ans[0][1]=v2,ans[1][0]=v3,ans[1][1]=v4; } v1=((matrix[0][0]*matrix[0][0]+matrix[0][1]*matrix[1][0])%7+7)%7; v2=((matrix[0][0]*matrix[0][1]+matrix[0][1]*matrix[1][1])%7+7)%7; v3=((matrix[1][0]*matrix[0][0]+matrix[1][1]*matrix[1][0])%7+7)%7; v4=((matrix[1][0]*matrix[0][1]+matrix[1][1]*matrix[1][1])%7+7)%7; matrix[0][0]=v1; matrix[0][1]=v2; matrix[1][0]=v3; matrix[1][1]=v4; nn/=2; } } int main() { int a,b,n; scanf("%d %d %d",&a,&b,&n); if(n==1||n==2) printf("1\n"); else { matrix[0][0]=a; matrix[0][1]=1; matrix[1][0]=b; matrix[1][1]=0; quick_pow(n-2); printf("%d\n",((ans[0][0]+ans[1][0])%7+7)%7); } return 0; }
//求循环长度(蜜汁上界限定,留补……) #include<bits/stdc++.h> using namespace std; #define maxn 1007 #define ll long long ll a[maxn]; int main() { int m,n,t; a[1]=1,a[2]=1; while(~scanf("%d %d %d",&m,&n,&t)) { int length=0,i=3; bool flag=false,mark=false; while(!(flag&&mark)) { a[i]=((m*a[i-1]+n*a[i-2])%7+7)%7; if(flag&&a[i]==1) mark=true; else if(flag&&a[i]!=1) flag=false; else if(!flag&&a[i]==1) flag=true; length++,i++; if(length==50) break; } printf("%lld\n",t%length==0?a[length]:a[t%length]); } return 0; }
相关文章推荐
- 51nod 1126 求递推序列的第N项(矩阵快速幂、循环)
- 51nod 1126 求递推序列的第N项 矩阵快速幂
- 51nod 1126 求递推序列的第N项【矩阵快速幂】
- 51nod 1126 求递推序列的第N项 (矩阵快速幂)
- 【51nod 1126】求递推序列的第N项 【矩阵快速幂】or【枚举找循环节】
- 51Nod 1126 求递推序列的第N项 矩阵快速幂
- 51nod 1126 求递推序列的第N项(矩阵快速幂)
- 【51nod】--1126 求递推序列的第N项 (数论&&模拟)
- [51NOD]1126 求递推序列的第N项 [线性递推关系与矩阵乘法]
- 51NOD 1126求递推序列的第N项 模拟找循环节
- [51NOD1126]求递推序列的第n项(矩阵快速幂)
- 51 nod 1126 求递推序列的第N项 矩阵快速幂
- 51 nod 1126 求递推序列的第N项(矩阵快速幂)
- 【51Nod】1242 - 斐波那契数列的第N项(矩阵快速幂)
- 51nod 1126 求递推序列的第N项
- 51Nod 1126 求递推序列的第N项
- 51nod 1126 求递推序列的第N项
- 51nod 1242 斐波那契数列的第N项(矩阵快速幂)
- 51Nod Problem 1126 求递推序列的第N项(构造矩阵)
- 【51Nod】1126 求递推序列的第N项