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(矩阵+暴力求循环节)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4291 思路:首先保留求出循环节,然后就是矩阵求幂了. #include<iostream> ...
- HDU——4291A Short problem(矩阵快速幂+循环节)
A Short problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- HDU 5690——All X——————【快速幂 | 循环节】
All X Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- hdu 4794 FIb求循环节
很容易看出来这道题是求模n意义下fib数列的最小循环节 对于fib数列的最小循环节的求法,我们可以这样: 1.令n=p1^m1 * p2^m2 * p3^m3…… 2.分别计算fib数列在模p1^m1 ...
- HDU 2157 矩阵幂orDP
How many ways?? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- Cyclic Nacklace - HDU 3746(next求循环节)
题目大意:给你一些串,问如果想让这个串里面的循环节至少循环两次,需要添加几个字符(只能在最前面或者最后面添加).比如ababc 需要添加5个就是添加ababc. 分析:其实字符串的长度len-next ...
- HDU 6740 kmp最小循环节
题意:给一个无线循环小数的前几位,给n,m 选择其中一种出现在前几位的循环节方式(a个数),循环节的长度b 使得n*a-m*b最大 样例: 2 1 12.1212 输出 6 选择2,2*1-1*1=1 ...
- hdu 1358 Period 最小循环节
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1358 分析:已知字符串,求其由最小循环节构成的前缀字符串. /*Period Time Limit: ...
- hdu 3746 kmp求循环节
题意就是将所给的字符串变成多个完整的循环(至少两个),然后给出最少需要添加的字符数.
随机推荐
- RSA js加密 java解密
1. 首先你要拥有一对公钥.私钥: ``` pubKeyStr = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC1gr+rIfYlaNUNLiFsK/Kn ...
- android手机web网站拨打电话几种方式
1. <input name="phone" format="*m" value="13"/> <do type=&quo ...
- 迅为工业级arm开发板i.MX6DL开发板软件硬件全开源
i.MX6是基于ARM Cortex™-A9架构的高扩展性多核系列应用处理器,促进了如高稳定性工业平板电脑.差异化智能本.前装车载中控系统和超高清电子书阅读器等新一代应用的发展.强劲的3D图形加速引擎 ...
- fabric的安装
https://blog.csdn.net/lepton126/article/details/79148027
- Asp.Net MVC中Controller、Action、View是如何激活调用的
上篇我们介绍了MVC的路由,知道在注册路由的时候会创建一个MvcHandler将其和Url规则一起放入到了RouteCollection中,之后请求通过UrlRoutingModule,根据当前的UR ...
- Python 面向对象 组合-多态与多态性-封装-property
面向对象-组合 1.什么是组合 组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象 class Foo: xxx = 111 class Bar: yyy = 222 obj = Foo( ...
- [Python3网络爬虫开发实战] 1.8.2-Scrapy的安装
Scrapy是一个十分强大的爬虫框架,依赖的库比较多,至少需要依赖的库有Twisted 14.0.lxml 3.4和pyOpenSSL 0.14.在不同的平台环境下,它所依赖的库也各不相同,所以在安装 ...
- 版本控制git之五-标签管理 tags 标签 代码版本 如: v1.0
版本控制git之五-标签管理 打标签 像其他版本控制系统(VCS)一样,Git 可以给历史中的某一个提交打上标签,以示重要. 比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 等等). ...
- pandas的合并、连接、去重、替换
import pandas as pd import numpy as np # merge合并 ,类似于Excel中的vlookup df1 = pd.DataFrame({'key': ['K0' ...
- 洛谷 1197 [JSOI2008]星球大战
[题解] 把询问离线,倒着加点,并查集维护连通性即可. #include<cstdio> #include<cstring> #include<algorithm> ...