广义Fibonacci数列找循环节
今天将来学习如何求广义Fibonacci数列的循环节。
问题:给定,满足,求的循
环节长度。
来源:http://acdreamoj.sinaapp.com/ 1075题
分析:我们知道矩阵的递推关系如下
然后继续有
那么,现在的问题就转化为求最小的,使得
所以我们可以先找出符合条件的一个,然后枚举它的因子,找最小的。设
为了好解决问题,我们需要对矩阵进行相似对角化,即,我们先来求的特征值。
解得的特征值为
也就是说的相似对角矩阵为
因为我们知道,所以当时,, 由于
继续得到
设,那么分情况讨论:
(1)是模的二次剩余,由费马小定理得时,
(2)是模的二次非剩余,则有
根据欧拉准则有
那么继续得到
然后由费马小定理有,同理有
所以,当时,
(3)时,由于不存在,所以无法完成相似对角化,好在这种情况不存在。
所以综上所述:
是模的二次剩余时,枚举的因子
是模的二次非剩余时,枚举的因子
找最小的因子,使得
成立。
代码:
#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
#include <math.h>using namespace std;
typedef long long LL;
const int N = 2;
const LL MOD = 1000000007;LL fac[2][505];
int cnt,ct;LL pri[6] = {2, 3, 7, 109, 167, 500000003};
LL num[6] = {4, 2, 1, 2, 1, 1};struct Matrix
{LL m[N][N];
} ;Matrix A;
Matrix I = {1, 0, 0, 1};Matrix multi(Matrix a,Matrix b)
{Matrix c;for(int i=0; i<N; i++){for(int j=0; j<N; j++){c.m[i][j] =0;for(int k=0; k<N; k++){c.m[i][j] += a.m[i][k] * b.m[k][j];c.m[i][j] %= MOD;}}}return c;
}Matrix power(Matrix A,LL n)
{Matrix ans = I, p = A;while(n){if(n & 1){ans = multi(ans,p);n--;}n >>= 1;p = multi(p,p);}return ans;
}LL quick_mod(LL a,LL b)
{LL ans = 1;a %= MOD;while(b){if(b & 1){ans = ans * a % MOD;b--;}b >>= 1;a = a * a % MOD;}return ans;
}LL Legendre(LL a,LL p)
{LL t = quick_mod(a,(p-1)>>1);if(t == 1) return 1;return -1;
}void dfs(int dept,LL product = 1)
{if(dept == cnt){fac[1][ct++] = product;return;}for(int i=0; i<=num[dept]; i++){dfs(dept+1,product);product *= pri[dept];}
}bool OK(Matrix A,LL n)
{Matrix ans = power(A,n);return ans.m[0][0] == 1 && ans.m[0][1] == 0 &&ans.m[1][0] == 0 && ans.m[1][1] == 1;
}int main()
{fac[0][0] = 1;fac[0][1] = 2;fac[0][2] = 500000003;fac[0][3] = 1000000006;LL a,b,c,d;while(cin>>a>>b>>c>>d){LL t = a * a + 4 * b;A.m[0][0] = a;A.m[0][1] = b;A.m[1][0] = 1;A.m[1][1] = 0;if(Legendre(t,MOD) == 1){for(int i=0; i<4; i++){if(OK(A,fac[0][i])){cout<<fac[0][i]<<endl;break;}}}else{ct = 0;cnt = 6;dfs(0,1);sort(fac[1],fac[1]+ct);for(int i=0;i<ct;i++){if(OK(A,fac[1][i])){cout<<fac[1][i]<<endl;break;}}}}return 0;
}
广义Fibonacci数列找循环节相关推荐
- 【打表找循环节】ZOJ - 3939 The Lucky Week
Step1 Problem: 幸运日指,星期一是1 or 11 or 21号.给出第一个幸运日时间,问第n个幸运日的时间. 例如: 2016 4 11 2 输出: 2016 7 11 数据范围: 时间 ...
- 牛客 - 交换(思维+找循环节)
题目链接:点击查看 题目大意:给出一个数列 n ,要求通过交换使其从小到大排序的最小次数 题目分析:第一反应是求逆序对,把之前做过的题目贴过来结果只过了 10% ,静下心来又读了一下题,发现这个题目要 ...
- HDU 4857 Couple doubi(找循环节)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4861 解题报告:桌子上有k个球 ,第i个球的价值wi = 1^i+2^i+...+(p-1)^i (m ...
- HDU4611(找循环节)
题目:Balls Rearrangement #include <iostream> #include <string.h> #include <stdio.h>u ...
- (找循环节)Number Sequence
题目: A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2) ...
- luogu 1327 数列排序 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 J题 循环节
luogu 1327 数列排序 题意 给定一个数列\(\{an\}\),这个数列满足\(ai≠aj(i≠j)\),现在要求你把这个数列从小到大排序,每次允许你交换其中任意一对数,请问最少需要几次交换? ...
- Fib数模n的循环节
我们知道Fibonacci数列,现在我们来求一个Fib数模n的循环节的长度. 对于一个正整数n,我们求Fib数模n的循环节的长度的方法如下: (1)把n素因子分解,即 (2)分别计算Fib数模每个的循 ...
- HDU 4291 A Short problem 矩阵快速幂 循环节
题解思路: 构造矩阵,矩阵乘法计算还是t; 需要找循环节; (注意因为是复合函数,不可以在里面取mod) 暴力跑只有可以找到g(222222224)%1e9==g(0)%1e9; 所以 g(g(n ...
- hdu1005 Number Sequence(寻找循环节)
主题链接: huangjing 题意: 就是给了一个公式,然后求出第n项是多少... 思路: 题目中n的范围实在是太大,所以肯定直接递推肯定会超时,所以想到的是暴力打表,找循环节,可是也不是那么eas ...
最新文章
- .Net 程序员走向高端必读书单汇总
- threadx 信号量 应用_操作系统及ThreadX简介.ppt
- html盒子自动居中,css盒子怎么居中?
- mkfs.jffs2 制作镜像问题整理【原创】
- java运算符使用总结_Java运算符知识点总结
- 创建dataframe_Spark原理与实战(五) Spark核心数据抽象DataFrame
- 2个YUV视频 拼接技术
- 提升效率Mysql函数(function)|存储过程(procedure)
- Unix C编程:共享内存示例 测试代码
- c语言文件包含试题,C语言文件练习题含答案
- Servlet原理图
- MAC帧经过路由器,源目标MAC地址会改变,但是IP的源,目的地址不会改变
- 只需三步快速将flac转换mp3格式?
- android studio报错Error occurred during initialization of VM Could not reserve enough space
- 飞上天和太阳肩并肩中国人这项太阳能开发技术牛大发了
- hdu 1789 贪心算法
- javascript动态生成按钮并绑定点击事件
- 基于微信平台的学生信息管理系统
- 半导体器件基础08:MOS管结构和原理(2)
- UNIX环境高级编程(屏幕打印和inet_ntoa输出异常问题)
热门文章
- Actuator提供的endpoint
- TCP/IP的七层负载均衡
- 数据仓库分层和元数据管理
- SpringBoot-高级-检索-整合SpringDataElasticsearch
- css box 等高布局,css实现等高布局有哪些方式
- python装饰器setter_第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter...
- MySQL 复制 - 性能与扩展性的基石:概述及其原理
- springMVC---处理模型数据方法 *
- Cool!15个创意的 CSS3 文本效果【下篇】
- 接口隔离原则(设计模式4)