给定递推式:

  

求Fn.

分析:给出的公式可以用快速矩阵幂运算得到,但 P/n 整除对于不同的i,值是不同的。

可以根据P将3-n分成若干块,每块中P整除n的值是相同的。分块的时候要注意判断。

将每块的快速幂结果累乘得到结果。

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
const int MAXN = 1e5+;
const int SIZE = ;
const int MOD = 1e9+;
int N;
int A, B, C, D, P;
int cc; LL ret_multi[SIZE][SIZE];
void multi(LL a[][SIZE], LL b[][SIZE])
{
memset(ret_multi, , sizeof ret_multi);
for( int i = ; i < SIZE; i++ )
for( int j = ; j < SIZE; j++)
for( int k = ; k < SIZE; k++ )
ret_multi[i][j] = (ret_multi[i][j] + a[i][k] *b[k][j]) %MOD;
for( int i = ; i < SIZE; i++ )
for( int j = ; j < SIZE; j++)
a[i][j] = ret_multi[i][j];
} LL ret_qpow[SIZE][SIZE];
LL base[SIZE][SIZE];
void qpow(LL b[][SIZE], LL index)
{
memset(ret_qpow, , sizeof ret_qpow);
memcpy(base, b, sizeof base); for( int i = ; i < SIZE; i++) ret_qpow[i][i] = ;
while(index){
if( index &)
multi(ret_qpow, base);
index /= ;
multi(base, base);
}
} LL m[][SIZE] = {
{D, C, cc},
{, , },
{, , }
}; LL f[][SIZE] = {
{B, , },
{A, , },
{, , }
}; int getRight(int cc)
{
int L = , R = N;
int ret = N;
while(L <= R){
int mid = L + (R-L)/;
if( P/mid >= cc){
ret = mid;
L = mid+;
}
else R = mid-;
}
return ret;
} vector<PII> range; int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif int T; scanf("%d",&T);
while(T--){
range.clear();
scanf("%d%d%d%d%d%d",&A,&B,&C,&D,&P,&N);
if(N==){
printf("%d\n",A); continue;
}
else if(N==){
printf("%d\n",&B); continue;
}
for( int i = ; i <= N; i++ ) //分块
{
int cc = P/i;
int j = getRight(cc);
range.push_back({i, j});
i = j;
} LL m[][SIZE] = {
{D, C, cc},
{, , },
{, , }
}; LL f[][SIZE] = {
{B, , },
{A, , },
{, , }
}; for( PII rng :range){
const int &n1 = rng.first;
const int &n2 = rng.second;
cc = P/n1; m[][] = cc; qpow(m, n2-(n1-));
multi(ret_qpow, f); memcpy(f, ret_multi, sizeof f);
}
printf("%lld\n",f[][]%MOD);
}
return ;
}

HDU - 6395 Sequence (分块+快速矩阵幂)的更多相关文章

  1. HDU 6395 Sequence(分段矩阵快速幂)题解

    题意: 已知\(A,B,C,D,P,n\)以及 \[\left\{ \begin{aligned} & F_1 = A \\ & F_2 = B\\ & F_n = C*F_{ ...

  2. CodeForces621E 快速矩阵幂优化dp

    有时些候在用快速矩阵幂优化dp的时候,它的矩阵乘法是不那么容易被具体为题目背景的意思的,大多数时候难以理解矩阵之间相乘的实际意义,正如有时候我们不知道现在在做手头这些事情的意义,但倘若是因一个目标而去 ...

  3. Java大数——快速矩阵幂

    Java大数——快速矩阵幂 今天做了一道水题,尽管是水题,但是也没做出来.最后问了一下ChenJ大佬,才慢慢的改对,生无可恋了.... 题目描述: 给a,b,c三个数字,求a的b次幂对c取余. 数据范 ...

  4. HDU 6395 Sequence 【矩阵快速幂 && 暴力】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6395 Sequence Time Limit: 4000/2000 MS (Java/Others)   ...

  5. HDU----(4291)A Short problem(快速矩阵幂)

    A Short problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  6. HDU - 6395 Sequence (整除分块+矩阵快速幂)

    定义数列: $\left\{\begin{eqnarray*} F_1 &=& A \\ F_2 &=& B \\ F_n &=& C\cdot{}F_ ...

  7. Tr A(HDU 1575 快速矩阵幂模板)

    Tr A Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. HDU----(4549)M斐波那契数列(小费马引理+快速矩阵幂)

    M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Sub ...

  9. HDU----(2157)How many ways??(快速矩阵幂)

    How many ways?? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

随机推荐

  1. ajax取消重复请求

    var pendingRequests = {}; $.ajaxPrefilter(function(options, originalOptions, jqXHR) { var key = opti ...

  2. hdu 2167(状压dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2167 思路:经典的状压dp题,前后,上下,对角8个位置不能取,状态压缩枚举即可所有情况,递推关系是为d ...

  3. 配置管理之PackageProvider接口

     PackageProvider的开始 从前面几章中我们了解到了一点:想知道如何加载相关配置文件就必须去找StrutsXmlConfigurationProvider类和XmlConfiguratio ...

  4. OGRE 保存纹理到文件

    Ogre::TexturePtr tex = Ogre::TextureManager::getSingleton( ).getByName( "YaHeiTexture" ); ...

  5. 【BZOJ5060】魔方国 特判

    [BZOJ5060]魔方国 Description 小奇和魔法猪打开了战狂的遗迹,穿越到了东元20年.东元元年,战狂率领一千万士兵毁灭了一个又一个文明,并建立起了新文明——昌和帝国,招募了八位伟人:大 ...

  6. vue+node+mongoDB 火车票H5(三)---git提交时忽略不想提交的文件

    想要把项目通过git提交到GitHub上,但提交时并不想提交node_modules文件夹,这个文件夹太大 git 提交代码时不提交配置文件夹node_modules 在.gitignore文件中添加 ...

  7. Spring Cloud Zuul实现IP访问控制

    接着上篇文章 https://www.cnblogs.com/mxmbk/p/9569438.html IP访问限制和黑白名单如何做,需要解决以下几个问题: 1.如何识别正常访问和异常访问?(一段时间 ...

  8. 用RSS订阅微信公众号

    现在用RSS的人应该不多了,不过还是写一下吧. 一.付费服务:今天看啥 1.付费原因: 目前,网上几乎没有免费的用RSS订阅微信公号的方法,所以我推荐的是付费方法: 具体使用的服务是今天看啥,服务还是 ...

  9. Parrot Linux国内源

    China USTC (University of Science and Technology of China and USTCLUG) - Hefei University 1 Gbps for ...

  10. 创建TPL自定义模板

    文件布局 <!--1d7c7a527b6335cc7a623305ca940e1findex.tpl.html--> <!DOCTYPE html PUBLIC "-//W ...