HDU 6395 Sequence(分段矩阵快速幂)题解
题意:
已知\(A,B,C,D,P,n\)以及
\begin{aligned}
& F_1 = A \\
& F_2 = B\\
& F_n = C*F_{n-2} + D*F_{n-2}+\lfloor(\frac{P}{n})\rfloor
\end{aligned}
\right.
\]
,求\(F_n \ mod\ (1e9e+7)\),\(n \leq 1e9\)
思路:
显然\(\lfloor(\frac{P}{n})\rfloor\)相同的情况是有区间的,那么直接分区间分段矩阵快速幂。
代码:
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<ctime>
#include<cmath>
#include<cstdio>
#include<string>
#include<vector>
#include<cstring>
#include<sstream>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 100000 + 5;
const int INF = 0x3f3f3f3f;
const ull seed = 131;
const ll MOD = 1e9 + 7;
const double eps = 1e-8;
using namespace std;
struct Mat{
    ll s[3][3];
    Mat(){
        memset(s, 0, sizeof(s));
    }
    void init(){
        for(int i = 0; i < 3; i++)
            s[i][i] = 1;
    }
};
Mat pmul(Mat a, Mat b){
    Mat c;
    for(int i = 0; i < 3; i++){
        for(int j= 0; j < 3; j++){
            for(int k = 0; k < 3; k++){
                c.s[i][j] = (c.s[i][j] + a.s[i][k] * b.s[k][j]) % MOD;
            }
        }
    }
    return c;
}
Mat ppow(Mat a, ll b){
    Mat ret;
    ret.init();
    while(b){
        if(b & 1) ret = pmul(ret, a);
        a = pmul(a, a);
        b >>= 1;
    }
    return ret;
}
int main(){
    int T;
    scanf("%d", &T);
    while(T--){
        ll a, b, c, d, p, n;
        scanf("%lld%lld%lld%lld%lld%lld", &a, &b, &c, &d, &p, &n);
        Mat f, t, temp;
        t.s[0][0] = d, t.s[1][0] = c, t.s[2][0] = 1, t.s[0][1] = 1, t.s[2][2] = 1;
        f.s[0][0] = b, f.s[0][1] = a;
        for(int i = 3; i <= n; ){
            ll l, r, pn = p / i;
            if(pn > 0)
                l = i, r = min(n, (p - p % pn) / pn);
            else
                l = i, r = n;
            f.s[0][2] = pn;
            temp = ppow(t, r - l + 1);
            f = pmul(f, temp);
            i = r + 1;
        }
        printf("%lld\n", f.s[0][0]);
    }
    return 0;
}
HDU 6395 Sequence(分段矩阵快速幂)题解的更多相关文章
- HDU 6395 Sequence 【矩阵快速幂 && 暴力】
		任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6395 Sequence Time Limit: 4000/2000 MS (Java/Others) ... 
- HDU 5667 Sequence(矩阵快速幂)
		Problem Description Holion August will eat every thing he has found. Now there are many foods,but he ... 
- HDU 5667 Sequence【矩阵快速幂+费马小定理】
		题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5667 题意: Lcomyn 是个很厉害的选手,除了喜欢写17kb+的代码题,偶尔还会写数学题.他找到 ... 
- HDU 6395  分段矩阵快速幂     HDU 6386   建虚点+dij
		http://acm.hdu.edu.cn/showproblem.php?pid=6395 Sequence Time Limit: 4000/2000 MS (Java/Others) Me ... 
- BZOJ 2326 数学作业(分段矩阵快速幂)
		实际上,对于位数相同的连续段,可以用矩阵快速幂求出最后的ans,那么题目中一共只有18个连续段. 分段矩阵快速幂即可. #include<cstdio> #include<iostr ... 
- HDU.1575 Tr A ( 矩阵快速幂)
		HDU.1575 Tr A ( 矩阵快速幂) 点我挑战题目 题意分析 直接求矩阵A^K的结果,然后计算正对角线,即左上到右下对角线的和,结果模9973后输出即可. 由于此题矩阵直接给出的,题目比较裸. ... 
- hdu 3117 Fibonacci Numbers 矩阵快速幂+公式
		斐波那契数列后四位可以用快速幂取模(模10000)算出.前四位要用公式推 HDU 3117 Fibonacci Numbers(矩阵快速幂+公式) f(n)=(((1+√5)/2)^n+((1-√5) ... 
- 数学--数论--HDU - 6395 Let us define a sequence as below 分段矩阵快速幂
		Your job is simple, for each task, you should output Fn module 109+7. Input The first line has only ... 
- HDU 5950 Recursive sequence(矩阵快速幂)题解
		思路:一开始不会n^4的推导,原来是要找n和n-1的关系,这道题的MOD是long long 的,矩阵具体如下所示 最近自己总是很坑啊,代码都瞎吉坝写,一个long long的输入写成%d一直判我TL ... 
随机推荐
- 2021年首届.NET线下沙龙上海站 - 2021 .NET Meetup in Shanghai
			.NET Conf 2020 刚刚在苏州落下帷幕, .NET 开发者们的热情不减,来自五湖四海的朋友一起参加疫情之下的 .NET 盛会. 2021年上海第一场线下活动就要来了,快来加入我们一起学习.N ... 
- 全网最详细的PyCharm+Anaconda的安装。
			目录 PyCharm的安装 一.下载安装包 1.安装网站 2.在导航栏输入网址回车 3.点击 DOWNLOAD. 4.它有专业版和社区版,我们下载社区版就可以使用了.(专业版要收费) 二.安装过程 5 ... 
- 简单的DbContext工厂类(EFCore)
			前言 根据appsettings.json的中配置的数据库类型,使用工厂模式创建DbContext 代码实现 appsettings.json中的配置项 //使用的数据库类型 "Server ... 
- pytest:通过scope控制fixture的作用范围
			一.fixture里面有个参数scope,通过scope可以控制fixture的作用范围,根据作用范围大小划分:session>module>class>function,具体作用范 ... 
- linux上jar项目启动脚本
			---------------启动:start.sh #!/bin/bashcd `dirname $0`BIN_DIR=`pwd`cd ..DEPLOY_DIR=`pwd`CONF_DIR=$DEP ... 
- makefile自动生成学习
			https://www.cnblogs.com/jrglinux/p/6964169.html 关键是如何写Makefile.am 其他的交给 自动工具完成 添加一个 很好的博客 学习下 https ... 
- LDAP学习
			.top pre { display: block; background: rgba(68, 67, 65, 1); color: rgba(255, 255, 255, 1); margin: 1 ... 
- 从零开始学Java (一)环境配置
			1.下载jdk Oracle官网 2.配置环境变量 JAVA_HOME:指明JDK安装路径,如C:\Program Files\Java\jdk1.7.0Path:变量中添加 %JAVA_HOME%\ ... 
- 如何设计一个亿级网关(API Gateway)?
			1.背景 1.1 什么是API网关 API网关可以看做系统与外界联通的入口,我们可以在网关进行处理一些非业务逻辑的逻辑,比如权限验证,监控,缓存,请求路由等等. 1.2 为什么需要API网关 RPC协 ... 
- loj10103电力
			题目描述 原题来自:CTU Open 2004 求一个图删除一个点之后,联通块最多有多少. 输入格式 多组数据.第一行两个整数 P,C 表示点数和边数.接下来 C 行每行两个整数 ,表示 P1 与 ... 
