思路:

f= can * f1xn * f2yn * f3zn, 首先dp计算指数部分a= an-1 + an-2 + an-3 + 2 * n - 6, 而an-1 = an-2 + an-3 + an-4 + 2 * n - 8,相减可以得到a= 2 * an-1 - an-4 + 2。xn,yn和zn是普通的三阶斐波那契。计算完指数部分要对p - 1取模(由费马小定理知p为质数的情况ap - 1 % p = 1),然后再用快速幂计算各个部分相乘即可。

再记录一种两个互相交互的递推式的矩阵快速幂构造:

                    

实现:

 #include <bits/stdc++.h>
using namespace std; typedef long long ll;
typedef vector<vector<ll>> matrix; const ll mod = 1e9 + , p_mod = mod - ; matrix mat_mul(matrix & a, matrix & b)
{
matrix c(a.size(), vector<ll>(b[].size()));
for (int i = ; i < a.size(); i++)
{
for (int k = ; k < a[].size(); k++)
{
for (int j = ; j < b[].size(); j++)
{
c[i][j] = ((c[i][j] + a[i][k] * b[k][j] % p_mod) + p_mod) % p_mod;
}
}
}
return c;
} matrix mat_pow(matrix & a, ll n)
{
matrix res(a.size(), vector<ll>(a[].size()));
for (int i = ; i < a.size(); i++) res[i][i] = ;
while (n > )
{
if (n & ) res = mat_mul(res, a);
a = mat_mul(a, a);
n >>= ;
}
return res;
} ll pow(ll x, ll n)
{
ll res = ;
while (n > )
{
if (n & ) res = res * x % mod;
x = x * x % mod;
n >>= ;
}
return res;
} int main()
{
ll n, f1, f2, f3, c;
while (cin >> n >> f1 >> f2 >> f3 >> c)
{
matrix x(, vector<ll>(, )), a(, vector<ll>(, ));
x[][] = ; x[][] = -; x[][] = ;
x[][] = x[][] = x[][] = x[][] = ;
a[][] = ; a[][] = ;
matrix c_p = mat_pow(x, n - );
c_p = mat_mul(c_p, a);
matrix y(, vector<ll>(, )), b1(, vector<ll>(, )), b2(, vector<ll>(, )), b3(, vector<ll>(, ));
y[][] = y[][] = y[][] = y[][] = y[][] = ;
b1[][] = b2[][] = b3[][] = ;
matrix t = mat_pow(y, n - );
matrix f1_p = mat_mul(t, b1);
matrix f2_p = mat_mul(t, b2);
matrix f3_p = mat_mul(t, b3);
ll ans = ;
ans = ans * pow(c, c_p[][]) % mod;
ans = ans * pow(f1, f1_p[][]) % mod;
ans = ans * pow(f2, f2_p[][]) % mod;
ans = ans * pow(f3, f3_p[][]) % mod;
cout << ans << endl;
}
return ;
}

最新文章

  1. css自适应宽度高级写法:一行多列~~~某些列的宽度是固定值
  2. callback 转换到 promise
  3. [杂] ASP.NET MVC 之 Route To MvcHandler
  4. 常用NuGet插件
  5. 16g u盘变 成1g u盘 解决方案,使用驱动器中的光盘之前需要将其格式化
  6. mysql performance_schema 初探
  7. VMware双网卡实现虚拟机连开发板和Internet
  8. 在vmware workstation10上安装ubuntu14.04,出现以下问题
  9. 查询linux机器的公网ip
  10. vuejs2.0如何获取dom元素自定义属性值
  11. 滑动条QSlider
  12. C#访问MySQL数据库的方法
  13. 关于删除 hao123 主页设置的一点经验
  14. 转:【专题四】自定义Web浏览器
  15. CSS| 實例---寬度自由調節button,圖片切換
  16. CSAPP lab2 二进制拆弹 binary bombs phase_1
  17. 链表的基础题目学习(EPI)
  18. nested exception is java.lang.IllegalStateException: No persistence units parsed from {classpath*:META-INF/persistence.xml}
  19. 【SSH之旅】一步步学习Struts1框架(二):Struts实例
  20. Xilinx IP核使用(一)--FIFO

热门文章

  1. HTML5新增的结构元素
  2. 【转】eclipse中window-&gt;preference选项中没有tomcat的解决方法
  3. 常见错误及处理-jsp及Servlet
  4. Docker 基本使用
  5. hdu 1729 Stone Game
  6. springMvc配置 中文api
  7. Python时间与日期操作(datetime、time、calendar)
  8. Siverlight5 3D 中文环境搭建
  9. android 缓存路径
  10. Java面向对象_数据结构之链表