51nod 求递推序列的第N项(矩阵快速幂、模拟求循环长度)
来源:互联网 发布:多普达p800软件下载 编辑:程序博客网 时间:2024/05/22 00:26
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 longll 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;}
阅读全文
0 0
- 51nod 求递推序列的第N项(矩阵快速幂、模拟求循环长度)
- 51nod 1126 求递推序列的第N项(矩阵快速幂、循环)
- 【51nod 1126】求递推序列的第N项 【矩阵快速幂】or【枚举找循环节】
- 51nod 1126 求递推序列的第N项 (矩阵快速幂)
- 51 nod 1126 求递推序列的第N项(矩阵快速幂)
- 51nod 1126 求递推序列的第N项(矩阵快速幂)
- 51nod 1126 求递推序列的第N项 思路:递推模拟,求循环节。详细注释
- 51nod 1126 求递推序列的第N项 思路:递推模拟,求循环节。详细注释
- 51nod 1126 求递推序列的第N项 矩阵快速幂
- 51 nod 1126 求递推序列的第N项 矩阵快速幂
- 51nod 1126 求递推序列的第N项【矩阵快速幂】
- 51Nod 1126 求递推序列的第N项 矩阵快速幂
- 51NOD 1126求递推序列的第N项 模拟找循环节
- 51nod 1126 求递推序列的第N项(循环节)
- 51nod 1242 斐波那契数列的第N项(矩阵快速幂)
- 51nod 1242 斐波那契数列的第N项 (矩阵快速幂)
- 【51Nod】1242 - 斐波那契数列的第N项(矩阵快速幂)
- 51nod 1242 斐波那契数列的第N项(矩阵快速幂)
- navicat导出csv乱码问题
- 递归方法求数组最大值
- python_lesson 2_save source code
- PHP7操作MongoDB增删改查
- jvm系列(九):Java GC 分析
- 51nod 求递推序列的第N项(矩阵快速幂、模拟求循环长度)
- 编译原理:句型分析和有关文法实用的说明
- 正则表达式总结(三):位置
- uCOSII操作系统学习笔记(1)
- 利用优先级队列(priority_queue)优化单源最短路径算法
- Mvp登录
- 【算法分析与设计】【第六周】690. Employee Importance
- jvm系列(十):如何优化Java GC「译」
- mysql安装到最后一步无响应的问题解决