/*
    hdu 4565
    题目大意
    给定a,b,n,m
    求s=┌(a+sqrt(b))^n┐%m

因为题目给出b的范围是(a-1)^2< b < a^2
    所以(a-sqrt(b))^n<1
    设:
    (a+sqrt(b))^n=x*a+y*sqrt(b);
    (a-sqrt(b))^n=x*a-y*sqrt(b);

因为(a-sqrt(b))^n<1
    所以(a+sqrt(b))^n+(a-sqrt(b))^n<(a+sqrt(b))^n+1
    即⌊(a+sqrt(b))^n+(a-sqrt(b))^n⌋=┌(a+sqrt(b))^n┐
    而(a+sqrt(b))^n+(a-sqrt(b))^n=x*a+y*sqrt(b)+x*a-y*sqrt(b)=2*a*x是整数
    所以⌊(a+sqrt(b))^n+(a-sqrt(b))^n⌋=(a+sqrt(b))^n+(a-sqrt(b))^n
    所以我们要求的就转化为
    Cn=s=((a+sqrt(b))^n+(a-sqrt(b))^n)%m
    Cn*((a+sqrt(b))+(a-sqrt(b)))=((a+sqrt(b))^n+(a-sqrt(b))^n)*((a+sqrt(b))+(a-sqrt(b)))
    2*a*Cn=(a+sqrt(b))^(n+1)+(a-sqrt(b))^(n+1)+(a-sqrt(b))^n*(a+sqrt(b))+(a+sqrt(b))^n*(a-sqrt(b))
    2*a*Cn=C(n+1)+(a-sqrt(b))^(n-1)*(a-sqrt(b))*(a+sqrt(b))+(a+sqrt(b))^(n-1)*(a-sqrt(b))*(a+sqrt(b))
    2*a*Cn=C(n+1)+(2*a-b)*((a-sqrt(b))^(n-1)+(a+sqrt(b))^(n-1))
    2*a*Cn=C(n+1)+(2*a-b)*C(n-1)
    C(n+1)=2*a*Cn-(2*a-b)*C(n-1)
    Cn=2*a*C(n-1)-(2*a-b)*C(n-2)
    然后构造矩阵即可
    但是要注意可能出现负数
    所以取模的时候将其转化为整数即可
*/
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <math.h>
#include <string.h>
#define MAX 3
#define ll long long
using namespace std;
struct matrix
{
    ll m[MAX][MAX];
};
ll mod;
matrix matrixmul(matrix a,matrix b)
{
    matrix c;
    for(int i=1; i<=2; i++)
        for(int j=1; j<=2; j++)
        {
            c.m[i][j]=0;
            for(int k=1; k<=2; k++)
                c.m[i][j]+=(a.m[i][k]*b.m[k][j])%mod;
            c.m[i][j]%=mod;
        }
    return c;
}
matrix quickpow(matrix m,ll n)
{
    matrix b;
    memset(b.m,0,sizeof(b.m));
    for(int i = 1; i <= 2; i++)
        b.m[i][i] = 1;
    while(n>=1)
    {
        if(n&1)
            b=matrixmul(b,m);
        n=n>>1;
        m=matrixmul(m,m);
    }
    return b;
}

int main()
{
    ll a,b,n;
    while(cin>>a>>b>>n>>mod)
    {
        matrix res;
        res.m[1][1]=2*a%mod;res.m[1][2]=(-(a*a%mod-b)+mod)%mod;
        res.m[2][1]=1;res.m[2][2]=0;
        matrix ans=quickpow(res,n-1);
        ll s=(((ans.m[1][1]*2)%mod*a)%mod+(ans.m[1][2]*2)%mod)%mod;
        cout<<s<<endl;
    }
    return 0;
}

hdu 4565(推公式、矩阵快速幂)相关推荐

  1. HDU - 4565 So Easy!(共轭构造+推公式+矩阵快速幂)

    题目链接:点击查看 题意:给出a,b,m,n,求 解析:题意一目了然,此题的关键是推出解决问题的公式. 首先,题目要求括号内n次方后向上取整再模m,而这里给到的a与b的关系接下来也会用到:<b& ...

  2. 2016 pku campus/OpenJ_POJ - C16H(推公式+矩阵快速幂)

    传送门 题面: 描述 Wenwen has a magical ball. When put on an infinite plane, it will keep duplicating itself ...

  3. hdu 2842 Chinese Rings 矩阵快速幂

    分析: 后面的环能不能取下来与前面的环有关,前面的环不被后面的环所影响.所以先取最后面的环 设状态F(n)表示n个环全部取下来的最少步数 先取第n个环,就得使1~n-2个环属于被取下来的状态,第n-1 ...

  4. HDU - 4990 Reading comprehension(矩阵快速幂,水题)

    题目链接:点击查看 题目大意:给出一段程序,进行优化后提交 题目分析:其实就是找规律,大水题一个,偶尔也是需要做做水题找找自信(逃) 先将题目中的程序拿下来,跑上100项,然后拿到oeis里找一下规律 ...

  5. HDU - 5015 233 Matrix(矩阵快速幂)

    题目链接:点击查看 题目大意:初始化:第一行依次为233,2333,23333....第一列依次为a0,a1,a2....(题目中会给出),再给出递推公式:,求矩阵中第n行m列的数字是多少 题目分析: ...

  6. HDU 2256Problem of Precision(矩阵快速幂)

    题意 求$(\sqrt{2} + \sqrt{3})^{2n} \pmod {1024}$ $n \leqslant 10^9$ Sol 看到题解的第一感受:这玩意儿也能矩阵快速幂??? 是的,它能q ...

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

    Tr A Problem Description A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. Input 数据的第一行是一个T,表示有T组数据. 每 ...

  8. UESTC - 1610 递推方程+矩阵快速幂

    感觉像是HDU Keyboard的加强版,先推出3张牌时的所有组合,然后递推出n张牌 看到n=1e18时吓尿了 最后24那里还是推错了.. (5行1列 dp[1][n],dp[2][n],dp[3][ ...

  9. 牛客14607 递推(矩阵快速幂构造)

    链接:https://ac.nowcoder.com/acm/problem/14607 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 131072K,其他语言2621 ...

  10. 考研路茫茫――单词情结 HDU - 2243(ac自动机 + 矩阵快速幂)

    考研路茫茫--单词情结 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

最新文章

  1. codevs 2879 堆的判断
  2. 动态代理的概述和实现
  3. Kafka学习 之 理解Kafka集群(二)
  4. hadoop2.7.3+spark2.1.0+scala2.12.1环境搭建(4)SPARK 安装
  5. 框架 go_GoFrame v1.13.1 发布,Go 应用开发框架
  6. eigen 编译_四足机器人优化方法:Webots下Eigen与qpOASES非线性优化库环境搭建
  7. Win10x64-WDM设备驱动开发入门 - 第六章 VMware-Win10x64+WDK10+VS2015/2019环境搭建与双机调试
  8. Java实现在线打开word文档加盖印章/盖章/签名功能
  9. zt电脑围棋中的人工智能技术
  10. 财务风险分析从哪几个角度进行分析
  11. C语言客房管理系统课程设计
  12. 来,教你开发一款图形编辑器
  13. Synctoy2.1通过计划任务备份文件到网络驱动器注销不生效问题
  14. SpringBoot+LayUI+MybatisPlus+Echarts图表 前后端分离 实现数据统计功能
  15. 阿里智能对话交互技术实践与创新
  16. Photoshop(4)做海报的心得
  17. Python提取多张excel表上的数据,合并汇总到一张新表
  18. 如何不翻墙访问ChatGpt?
  19. js 实现一个简单的存钱/取钱/查询/退出等操作的ATM功能.
  20. html特效代码 枫叶,jQuery飘落的枫叶

热门文章

  1. 三极管与稳压管恒流电路
  2. Python读取Excel数据并进行函数拟合
  3. 彼得林奇的成功投资三——回购+提高股息+无多元化
  4. 计算机专业可以评电力工程职称吗,电力工程类职称评审专业范围,你了解多少?...
  5. 修改CentOS默认yum源地址提高下载速度
  6. 一元三次方程的解法史
  7. Jmeter_基本操作-取样器
  8. 【论文笔记】Combining Reinforcement Learning and Rule-based Method to Manipulate Objects in Clutter
  9. 计算机系统常见故障及处理,电脑常见故障以及解决方案都在这里
  10. python培训课程-python培训课程