for(i=;i<=n;i++)
{
if(i&)ans=(ans*+)%m;
else ans=ans*%m;
}

给定n,m。让你用O(log(n))以下时间算出ans。

打表,推出 ans[i] = 2^(i-1) + f[i-2]

故 i奇数:ans[i] = 2^(i-1) + 2^(i-3) ... + 1;

  i偶数:ans[i] = 2^(i-1) + 2^(i-3) ... + 2;

故可以用等比数列求和公式。

公式涉及除法。我也没弄懂为啥不能用逆元,貌似说是啥逆元可能不存在。

所以a/b % m == a%(b*m) / b 直接搞了。

#include <cstdio>
#include<iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include<vector>
typedef long long LL; LL quick_pow(LL a, LL b, LL m)
{
LL ans = , base = a % m;
while(b)
{
if (b & ) ans = (ans * base) % m;
base = (base * base) % m;
b >>= ;
}
return ans;
} int main()
{
LL n, m; while(~scanf("%lld%lld", &n, &m))
{
LL a1 = (n % ) ? : ;
LL sum = a1 * (quick_pow(, (n+)/, *m) - );
LL ans = (sum % ( * m)) / ;
printf("%lld\n", ans);
}
}

第一次学矩阵快速幂,再贴个矩阵快速幂的板子。

f[n] = f[n-1] + 2 * f[n-2] + 1,故可以构造矩阵

f[n-] f[n-]                        f[n-]   f[n]
=

模板来源:https://blog.csdn.net/u012860063/article/details/39123605

#include <cstdio>
#include<iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include<vector>
typedef long long LL; struct Matrix
{
LL m[][];
} I, A, B, T; LL a,b,n, mod;
int ssize = ; Matrix Mul(Matrix a,Matrix b)
{
int i,j,k;
Matrix c;
for (i = ; i <= ssize; i++)
for(j = ; j <= ssize; j++)
{
c.m[i][j]=;
for(k = ; k <= ssize; k++)
{
c.m[i][j]+=(a.m[i][k]*b.m[k][j]);
c.m[i][j]%=mod;
}
} return c;
} Matrix quickpagow(int n)
{
Matrix m = A, b = I;
while(n)
{
if(n & ) b = Mul(b, m);
n >>= ;
m = Mul(m, m);
}
return b;
} int main()
{
while(~scanf("%lld%lld",&n, &mod))
{
memset(I.m,,sizeof(I.m));
memset(A.m,,sizeof(A.m));
memset(B.m,,sizeof(B.m)); for(int i = ; i <= ssize; i++) I.m[i][i] = ;
//I是单位矩阵 B.m[][] = , B.m[][] = , B.m[][] = ;
A.m[][] = ;
A.m[][] = A.m[][] = A.m[][] = A.m[][] = ; if(n == ) printf("%lld\n", % mod);
else if(n == ) printf("%lld\n", % mod);
else
{
T = quickpagow(n-);
T = Mul(B, T);
printf("%lld\n",T.m[][] % mod);
}
}
}

最新文章

  1. Metaio在Unity3D中报错 Start: failed to load tracking configuration: TrackingConfigGenerated.xml 解决方法
  2. ILMerge
  3. MD5 加密字符串
  4. Bootstrap 4 中 Alerts 实现
  5. Unity Shader : Ghost(残影) v1
  6. 120条Photoshop新手必看技巧
  7. Base-Android快速开发框架(三)--数据存储之SQLite
  8. 【HDOJ】2544 最短路
  9. new Random().nextInt
  10. Python学习笔记七-错误和异常
  11. Linux下终端利器tmux(转)
  12. linux脚本Shell之awk详解
  13. FPGA IN 金融领域
  14. 【Mac】-NO.133.Mac.1 -【重置忘记macos root密码】
  15. 转载:MVC升级以后出现&quot;当前上下文中不存在ViewBag&quot;的问题解决
  16. FICO基础知识(二)
  17. linux如何查看某个端口是否开放
  18. JUnit 4 Vs TestNG比较
  19. 03_python_基本数据类型
  20. [AaronYang]C#人爱学不学[1]

热门文章

  1. 白话SpringCloud | 第二章:服务注册与发现(Eureka)-上
  2. PHPGGC学习----实践
  3. AngularJs在ng-click函数中如何获取代表当前元素的DOM对象
  4. JS文本框输入限制
  5. 《C#高效编程》读书笔记06-理解几个等同性判断之间的关系
  6. juypter-notebook安装配置
  7. AngularJS(十):依赖注入
  8. BZOJ3624: [Apio2008]免费道路(最小生成树)
  9. AngularJS 整理学习
  10. Google pieCharts的学习