hdu 4291 矩阵幂 循环节
http://acm.hdu.edu.cn/showproblem.php?pid=4291
凡是取模的都有循环节-----常数有,矩阵也有,并且矩阵的更奇妙:
g(g(g(n))) mod 109 + 7 最外层MOD=1e9+7 能够算出g(g(n))的循环节222222224。进而算出g(n)的循环节183120LL。然后由内而外计算就可以
凝视掉的是求循环节的代码
//#pragma comment(linker, "/STACK:102400000,102400000")
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <iostream>
#include <iomanip>
#include <cmath>
#include <map>
#include <set>
#include <queue>
using namespace std;#define ls(rt) rt*2
#define rs(rt) rt*2+1
#define ll long long
#define ull unsigned long long
#define rep(i,s,e) for(int i=s;i<e;i++)
#define repe(i,s,e) for(int i=s;i<=e;i++)
#define CL(a,b) memset(a,b,sizeof(a))
#define IN(s) freopen(s,"r",stdin)
#define OUT(s) freopen(s,"w",stdout)
const ll ll_INF = ((ull)(-1))>>1;
const double EPS = 1e-8;
const double pi = acos(-1.0);
const int INF = 100000000;
const ll MOD[3] = {183120LL,222222224LL,1000000007LL};
const int N = 2;struct Matrix{ll m[N][N];//int sz;//矩阵的大小
};Matrix I= {3LL,1LL,//要幂乘的矩阵1LL,0LL,};
Matrix unin={1LL,0LL,//单位矩阵0LL,1LL,};
Matrix matrixmul(Matrix a,Matrix b,long long mod)//矩阵a乘矩阵b
{Matrix c;for(int i=0; i<N; i++)for(int j=0; j<N; j++){c.m[i][j]=0LL;for(int k=0; k<N; k++)c.m[i][j]+=(a.m[i][k]*b.m[k][j])%mod;c.m[i][j]%=mod;}return c;
}
Matrix quickpow(long long n,long long mod)
{Matrix m=I,b=unin;//求矩阵I的n阶矩阵while(n>=1){if(n&1)b=matrixmul(b,m,mod);n=n>>1;m=matrixmul(m,m,mod);}return b;
}ll solve(ll n)
{ll ans;Matrix ret;ret.m[0][0]=n;for(int i=0;i<3;i++){if(ret.m[0][0]!=0 && ret.m[0][0]!=1)ret=quickpow(ret.m[0][0]-1,MOD[i]);}return ret.m[0][0];
}int main()
{//precal();ll n;while(~scanf("%I64d",&n)){if(n==0){puts("0");continue;}if(n==1){puts("1");continue;}//printf("%I64d\n",solve(n));cout << solve(n)%1000000007LL << endl;}return 0;
}
hdu 4291 矩阵幂 循环节
hdu 4291 矩阵幂 循环节相关推荐
- HDU 4291 A Short problem 矩阵快速幂 循环节
题解思路: 构造矩阵,矩阵乘法计算还是t; 需要找循环节; (注意因为是复合函数,不可以在里面取mod) 暴力跑只有可以找到g(222222224)%1e9==g(0)%1e9; 所以 g(g(n ...
- hdu 5411 矩阵幂求和
碧云天,黄叶地,秋色连波,波上寒烟翠. 山映斜阳天接水,芳草无情,更在斜阳外. 黯乡魂,追旅思,夜夜除非,好梦留人睡. 明月楼高休独倚,酒入愁肠,化作相思泪. -----范仲淹<苏幕遮·碧云天& ...
- hdu 3374 String Problem (字符串最小最大表示 + KMP求循环节)
Problem - 3374 KMP求循环节. http://www.cnblogs.com/wuyiqi/archive/2012/01/06/2314078.html 循环节推导的证明相当的好,这 ...
- HDU - 3746 Cyclic Nacklace(KMP的next数组判循环节)
题目链接:点击查看 题目大意:现在规定想要制作一串珍珠手链,需要用到两段一模一样的字符串首位相接而成,现在给定一个字符串,问最少需要添加几个珍珠才能满足条件 题目分析:一开始以为是个简单的模拟题,但后 ...
- Fib数模n的循环节
我们知道Fibonacci数列,现在我们来求一个Fib数模n的循环节的长度. 对于一个正整数n,我们求Fib数模n的循环节的长度的方法如下: (1)把n素因子分解,即 (2)分别计算Fib数模每个的循 ...
- [2016湘潭邀请赛 A. 2016] 大数取模+循环节
[2016湘潭邀请赛 A. 2016] 大数取模+循环节 1. 题目链接 XTU OnlineJudge : [2016湘潭邀请赛 A. 2016] 2. 题意描述 [图片看不清可以放大.] 给定一个 ...
- HDU 4291 A Short problem
通过矩阵快速幂找循环节,注意要每一层都要找一次循环节...发个题解仅供大家对拍... #include<iostream> #include<cstdio> #include& ...
- 广义Fibonacci数列找循环节
今天将来学习如何求广义Fibonacci数列的循环节. 问题:给定,满足,求的循 环节长度. 来源:http://acdreamoj.sinaapp.com/ 1075题 分析:我们知道矩阵的递推 ...
- 【POJ - 2406】Power Strings (KMP,最小循环节)
题干: Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc ...
最新文章
- Unity(1)控制反转
- 统计学习方法——CART, Bagging, Random Forest, Boosting
- Memory and Trident
- python函数参数
- Idea 设置Eclipse快捷键(常用)
- 安卓活动(Activity)和碎片(Fragment)的生命周期
- springboot+vue+element+mybatisplus项目(后端)
- 公司发声明了!禁止所有程序员使用 Lombok !再使用绩效直接打C!
- Python3安装tkinter
- ansys 如何截取高清的网格图
- Ubuntu如何清理系统垃圾
- 常用的企业邮箱有哪些?什么邮箱好用
- ORB-SLAM3安装遇到的问题及解决
- md5编码java_MD5编码工具类 MD5Code.java
- 查询读者的借阅信息mysql_MySQL数据库命令行【篇章九】之数据库综合查询(SELECT)...
- vhdl加法器和减法器_半减法器和全减法器的设计
- MATLAB中 分数化简
- 2021-10-18_windows实时查看Nvidia显卡使用情况
- mumu的adb_如何使用网易mumu模拟器调试安卓程序?
- STM32精英版(正点原子STM32F103ZET6开发板)学习篇15——RTC实时时钟+备份区域BKP