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 矩阵幂 循环节相关推荐

  1. HDU 4291 A Short problem 矩阵快速幂 循环节

    题解思路: 构造矩阵,矩阵乘法计算还是t; 需要找循环节;   (注意因为是复合函数,不可以在里面取mod) 暴力跑只有可以找到g(222222224)%1e9==g(0)%1e9; 所以 g(g(n ...

  2. hdu 5411 矩阵幂求和

    碧云天,黄叶地,秋色连波,波上寒烟翠. 山映斜阳天接水,芳草无情,更在斜阳外. 黯乡魂,追旅思,夜夜除非,好梦留人睡. 明月楼高休独倚,酒入愁肠,化作相思泪. -----范仲淹<苏幕遮·碧云天& ...

  3. hdu 3374 String Problem (字符串最小最大表示 + KMP求循环节)

    Problem - 3374 KMP求循环节. http://www.cnblogs.com/wuyiqi/archive/2012/01/06/2314078.html 循环节推导的证明相当的好,这 ...

  4. HDU - 3746 Cyclic Nacklace(KMP的next数组判循环节)

    题目链接:点击查看 题目大意:现在规定想要制作一串珍珠手链,需要用到两段一模一样的字符串首位相接而成,现在给定一个字符串,问最少需要添加几个珍珠才能满足条件 题目分析:一开始以为是个简单的模拟题,但后 ...

  5. Fib数模n的循环节

    我们知道Fibonacci数列,现在我们来求一个Fib数模n的循环节的长度. 对于一个正整数n,我们求Fib数模n的循环节的长度的方法如下: (1)把n素因子分解,即 (2)分别计算Fib数模每个的循 ...

  6. [2016湘潭邀请赛 A. 2016] 大数取模+循环节

    [2016湘潭邀请赛 A. 2016] 大数取模+循环节 1. 题目链接 XTU OnlineJudge : [2016湘潭邀请赛 A. 2016] 2. 题意描述 [图片看不清可以放大.] 给定一个 ...

  7. HDU 4291 A Short problem

    通过矩阵快速幂找循环节,注意要每一层都要找一次循环节...发个题解仅供大家对拍... #include<iostream> #include<cstdio> #include& ...

  8. 广义Fibonacci数列找循环节

    今天将来学习如何求广义Fibonacci数列的循环节. 问题:给定,满足,求的循 环节长度. 来源:http://acdreamoj.sinaapp.com/ 1075题   分析:我们知道矩阵的递推 ...

  9. 【POJ - 2406】Power Strings (KMP,最小循环节)

    题干: Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc ...

最新文章

  1. Unity(1)控制反转
  2. 统计学习方法——CART, Bagging, Random Forest, Boosting
  3. Memory and Trident
  4. python函数参数
  5. Idea 设置Eclipse快捷键(常用)
  6. 安卓活动(Activity)和碎片(Fragment)的生命周期
  7. springboot+vue+element+mybatisplus项目(后端)
  8. 公司发声明了!禁止所有程序员使用 Lombok !再使用绩效直接打C!
  9. Python3安装tkinter
  10. ansys 如何截取高清的网格图
  11. Ubuntu如何清理系统垃圾
  12. 常用的企业邮箱有哪些?什么邮箱好用
  13. ORB-SLAM3安装遇到的问题及解决
  14. md5编码java_MD5编码工具类 MD5Code.java
  15. 查询读者的借阅信息mysql_MySQL数据库命令行【篇章九】之数据库综合查询(SELECT)...
  16. vhdl加法器和减法器_半减法器和全减法器的设计
  17. MATLAB中 分数化简
  18. 2021-10-18_windows实时查看Nvidia显卡使用情况
  19. mumu的adb_如何使用网易mumu模拟器调试安卓程序?
  20. STM32精英版(正点原子STM32F103ZET6开发板)学习篇15——RTC实时时钟+备份区域BKP

热门文章

  1. SpingMVC ModelAndView, Model,Control以及参数传递
  2. RHEL5 RHEL6 差异 1
  3. Flask 实战:如何从零开发“知乎”
  4. python标准类型内建函数_Python 标准库系列之内建函数
  5. 初识ES-es与mysql的概念对比
  6. ConcurrentHashMap的源码分析-高低位原理分析
  7. Spring IoC容器管理的Bean能够被垃圾回收吗?
  8. Spring容器初始化实现V2 版本
  9. 微信支付 - 提供支付中心商户订单查询
  10. Spring 核心特性