题目大意:求:
$$
\sum\limits_{i=0}^na^{n-i}b^i\pmod{p}
$$
$T(T\leqslant10^5)$组数据,$a,b,n,p\leqslant10^{18}​$

题解:$\sum\limits_{i=0}^na^{n-i}b^i=\dfrac{a^{n+1}-b^{n+1}}{a-b}$,然后$a-b$可能在$\pmod p$下没有逆元或者干脆是$0$。

出题人给了一个递归讨论$n$奇偶性的做法。(出题人在题解中各种表达他的毒瘤)

这边讲一个矩阵快速幂的。

令$f_n=\sum\limits_{i=0}^na^{n-i}b^i$

考虑$f_n\to f_{n+1}$,发现$f_{n+1}=af_n+b^{n+1}$,于是就可以愉快地矩阵快速幂啦。转移矩阵:
$$
\left[
\begin{matrix}
a&0\\
1&b
\end{matrix}
\right]
$$

把$[f_n,b^{n+1}]$左乘转移矩阵就可以得到$[f_{n+1},b_{n+2}]$,为了方便,可以把向量写成矩阵,然后发现若初始矩阵如下时:
$$
\left[
\begin{matrix}
0&0\\
1&b
\end{matrix}
\right]
$$
转移矩阵、状态矩阵右上角一定为$0$,就可以减少常数啦!

卡点:

C++ Code:

#include <cstdio>
#include <cctype>
namespace std {struct istream {
#define M (1 << 22 | 3)char buf[M], *ch = buf - 1;inline istream() { fread(buf, 1, M, stdin); }inline istream& operator >> (int &x) {while (isspace(*++ch));for (x = *ch & 15; isdigit(*++ch); ) x = x * 10 + (*ch & 15);return *this;}inline istream& operator >> (long long &x) {while (isspace(*++ch));for (x = *ch & 15; isdigit(*++ch); ) x = x * 10 + (*ch & 15);return *this;}
#undef M} cin;struct ostream {
#define M (1 << 20 | 3)char buf[M], *ch = buf - 1;inline ostream& operator << (long long x) {if (!x) {*++ch = '0'; return *this;}static int S[20], *top; top = S;while (x) {*++top = x % 10 ^ 48; x /= 10;}for (; top != S; --top) *++ch = *top;return *this;}inline ostream& operator << (const char x) {*++ch = x; return *this;}inline ~ostream() { fwrite(buf, 1, ch - buf + 1, stdout); }
#undef M} cout;
}int Tim;
long long n, a, b, mod;inline void reduce(long long &x) { x += x >> 63 & mod; }
inline long long mul(long long x, long long y) {long long res = x * y - static_cast<long long> (static_cast<long double> (x) * y / mod + 0.5) * mod;return res + (res >> 63 & mod);
}struct Matrix {long long s00, s10, s11;Matrix() { }Matrix(long long __s00, long long __s10, long long __s11) : s00(__s00), s10(__s10), s11(__s11) { }
#define M(l, r) mul(s##l, rhs.s##r)inline void operator *= (const Matrix &rhs) {static long long __s00, __s10, __s11;__s00 = M(00, 00);reduce(__s10 = M(10, 00) + M(11, 10) - mod);__s11 = M(11, 11);s00 = __s00, s10 = __s10, s11 = __s11;}
#undef M
} ;long long calc(long long n) {a %= mod, b %= mod;Matrix base(a, 1, b), res(0, 1, b);for (; n; n >>= 1, base *= base) if (n & 1) res *= base;return res.s10;
}int main() {std::cin >> Tim;while (Tim --> 0) {std::cin >> n >> a >> b >> mod;std::cout << calc(n) << '\n';}return 0;
}

  

转载于:https://www.cnblogs.com/Memory-of-winter/p/10354967.html

[洛谷P5137]polynomial相关推荐

  1. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  2. 洛谷 P1142 轰炸

    洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...

  3. 洛谷 P1387 最大正方形

    P1387 最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=10 ...

  4. 洛谷P2763 试题库问题

    题目:https://www.luogu.org/problemnew/show/P2763 题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性. ...

  5. 动态规划——洛谷_P1057传球游戏

    题目: 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏.游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球, ...

  6. 洛谷P1417 烹调方案

    洛谷P1417 烹调方案 如果是一般的01背包的话 选的先后是没关系的 但是这题选的先后是有关系的,因为他的价值是随着时间而变化的, 而你的01背包是做不到先选2再选1的 那么我们就跟国王游戏一样 用 ...

  7. 记忆优化搜索(简单题)(洛谷P3183 [HAOI2016]食物链 )( P5635 【CSGRound1】天下第一 )

    昨天做了蓝桥杯的时候,发现自己对于记忆优化搜索甚是不熟悉,所以今天随便找了几个基础题做做,顺便写下两片题解,顺便用了一下devc++敲的代码,发现没有代码补全真的可以说是灰常难受了... 洛谷P318 ...

  8. 洛谷 - 试炼场(全部题目备份)

    整理的算法模板合集: ACM模板 目录 1.新手村 1 - 1 洛谷的第一个任务 1 - 2 顺序与分支 1 - 3 循环!循环!循环! 1 - 4 数组 1 - 5 简单字符串 1 - 6 过程函数 ...

  9. 洛谷专题训练 ——【算法1-1】模拟与高精度

    洛谷题单[算法1-1]模拟与高精度 ACM-ICPC在线模板 题单链接: [算法1-1]模拟与高精度 下面的这一坨都是洛谷题单上的东东 题单简介 恭喜大家完成了第一部分语言入门,相信大家已经可以使用 ...

最新文章

  1. APP安全谁之过?爱加密为APP开发者分忧
  2. 安卓应用如何引用动态库
  3. EL之Boosting之GB(DTR):利用梯度提升法解决回归(对多变量的数据集+实数值评分预测)问题
  4. beandefinition与beanfactory
  5. 将一副图片编译进uboot
  6. jenkins内置环境变量
  7. 使用System.Drawing.Printing 画报表。
  8. canvas保存图片时,谷歌浏览器Chrome报错【解决方案】Not allowed to navigate top frame to data URL
  9. 《个人信息去标识化指南》笔记
  10. 智能门禁人脸识别小程序开发制作
  11. Linux/ubuntu AWK / BEGIN / END的用法
  12. 如何理解「朝闻道,夕死可矣」?
  13. html的android开发工具,只会html也可以做安卓app(附实例)
  14. JVM——GC算法原理
  15. 网线传输速度测试_网络传输速率及测速方法
  16. 开源私有lorawan server搭建
  17. GitLab安装使用(SSH+Docker两种方式)
  18. 微信小程序 - 设置图片高度自适应(宽度固定)
  19. gcc编译 -I头文件目录 -L lib库目录 -l动态库文件
  20. 局域网连接sql--SQL Server 2008

热门文章

  1. 难道这又是个未解之谜?--- 关于DLL中使用ADODATASET出错的问题
  2. 最长递增子序列问题的求解
  3. Google要推输入法 是战略布局还是战术需要?
  4. 3d模型 vv5_WEY VV5硬刚现代ix35!神仙颜值种草95后小伙
  5. opencv和python是什么关系_opencv和python的区别
  6. 为什么可积不一定可导_耳机为什么分L和R?你一定不知道真相
  7. iis服务器文件上传速度慢,windows 2008 R2 上传速度慢
  8. 渐变色填充菱形c语言,生成渐变色填充六边形的4种方法
  9. 第十六届智能车竞赛总决赛线上比赛赛道设计
  10. 中心频率为150kHz的选频放大检波电路补充测试