正题

题目链接:https://www.luogu.com.cn/problem/P5137


题目大意

TTT组数据给出n,a,b,pn,a,b,pn,a,b,p求
(∑0=1naibn−i)%p\left(\sum_{0=1}^na^ib^{n-i}\right)\%p(0=1∑n​aibn−i)%p

1≤T≤105,1≤n,a,b,p≤10181\leq T\leq 10^5,1\leq n,a,b,p\leq 10^{18}1≤T≤105,1≤n,a,b,p≤1018


解题思路

这个数据很大,考虑倍增求。

设为答案f(n)f(n)f(n),那么有
f(n)=f(n2)(an2+bn2)−an2bn2f(n)=f(\frac{n}{2})(a^{\frac{n}{2}}+b^{\frac{n}{2}})-a^{\frac{n}{2}}b^{\frac{n}{2}}f(n)=f(2n​)(a2n​+b2n​)−a2n​b2n​
f(n)=af(n−1)+bnf(n)=af(n-1)+b^{n}f(n)=af(n−1)+bn

倍增维护就好了

时间复杂度O(Tlog⁡n)O(T\log n)O(Tlogn)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cctype>
#define ll long long
using namespace std;
ll n,a,b,p,T;
ll read(){ll x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-f;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
ll fac(ll a,ll b){ll c=(long double)a*b/p;long double ans=a*b-c*p;if(ans>=p)ans-=p;else if(ans<0)ans+=p;return ans;
}
signed main()
{T=read();while(T--){n=read();a=read();b=read();p=read();ll ans=1,k=0,B=1,A=1;for(ll i=62;i>=0;i--){ans=(fac(A,ans)+fac(B,ans))%p;ans=(ans+p-fac(A,B))%p;k*=2;B=fac(B,B);A=fac(A,A);if((n>>i)&1){k++;B=fac(B,b);A=fac(A,a);ans=(fac(ans,a)+B)%p;}}printf("%lld\n",ans);}return 0;
}

P5137-polynomial【倍增】相关推荐

  1. [洛谷P5137]polynomial

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

  2. HDU - 3078 Network 倍增LCA

    倍增lca,把路径上点全部拉出来拍个序输出第k大就过了. 不知道怎么过的,咱也不敢问. #include<stdio.h> #include<string.h> #includ ...

  3. POJ - 1986 Distance Queries 倍增求LCA

    题意还是很有病的,说了半天后边的方向都没用的,意思就是跟样例一样求两点间的距离,裸的LCA 两个点x,y的距离=dis[x]+dis[y]-2*dis[LCA(x,y)]; 三个点x,y,z的距离=d ...

  4. BZOJ4568: [Scoi2016]幸运数字(线性基 倍增)

    题意 题目链接 Sol 线性基是可以合并的 倍增维护一下 然后就做完了?? 喵喵喵? // luogu-judger-enable-o2 #include<bits/stdc++.h> # ...

  5. 【BZOJ-3712】Fiolki LCA + 倍增 (idea题)

    3712: [PA2014]Fiolki Time Limit: 30 Sec  Memory Limit: 128 MB Submit: 303  Solved: 67 [Submit][Statu ...

  6. 专访中国移动钱岭:大数据更像是一种“倍增器”

    记者 | 杨丽 出品 | AI科技大本营(rgznai100) 为把握时代特征,2016 年中国移动确定并大力推动"大连接"战略,并制定了"十三五"时期做大连接 ...

  7. Alyona and a tree (树上倍增+差分)

    题意: 来源(洛谷翻译 题解: 首先先转化一下问题,题目问当前结点(u)的子树中有多少个孩子(设为v)满足dis(u,v)<=a[v],那么我们可以统计每个结点分别对哪些结点做出了贡献. 首先考 ...

  8. LCA 朴素算法+树差分倍增+Tarjan算法 三种算法实现c++代码实现

    哔哩哔哩up视频:https://www.bilibili.com/video/BV1nE411L7rz?t=379 转载:http 文章目录 树差分 & 倍增LCA Tarjan 朴素算法 ...

  9. 主席树 + 树上倍增 ---- codeforces 587C[树上倍增或者主席树]

    题目链接 给定一棵n个点的树,给定m个人(m≤n)在哪个点上的信息,每个点可以有任意个人:然后给q个询问,每次问u到v上的路径有的点上编号最小的k(k≤10)个人(没有那么多人就该有多少人输出多少人) ...

最新文章

  1. Python基础学习!容器:列表,元组,字典与集合!(1)
  2. 设计一个成绩分类 输入成绩 输出优秀_BenQ 明基 PD2720U 27寸 Thunderbolt3.0 专业设计显示器开箱评测...
  3. python英文单词-python常用150个英文单词
  4. 在FireFox IE 下Response 中文文件名乱码问题
  5. 毕业后两三月的本科毕业生,他们都怎么样了
  6. RAC OEM 打开无法显示CPU情况 的解决过程
  7. 关于gcc、glibc和binutils模块之间的关系
  8. oracle快捷语句框架中,Oracle框架:PL/SQL编程:
  9. linux脚本监控网卡流量,Shell脚本实现linux监控网卡实时流量[带宽]的方法
  10. 上周并发题的解题思路以及介绍Go语言调度器
  11. 怎么查询房贷批下来没?
  12. linux解压缩6层
  13. RN上使用react-native-video视频播放器插件
  14. matlab中卡尔曼滤波,卡尔曼滤波算法及MATLAB实现
  15. reviewboard--ubuntu安装reviewboard
  16. pc计算机含义,pc端游什么意思
  17. 淘宝铸造亿级流量的首页?十年一剑
  18. 计算机键盘掉色,为什么计算机键盘指示灯熄灭?
  19. LightOJ--1323 Billiard Balls (数学题)
  20. css 实现跑马灯/走马灯无缝衔接 js实现无缝滚动图片

热门文章

  1. 升级总代分享思路_桃生企业至尊七郎瓷砖新展厅全新升级惊艳亮相
  2. 紫光物联linux登录账号,紫光展锐打造操作系统生态,赋能万物互联智能时代
  3. 服务器不知道怎么回事安卓系统很卡,为什么安卓系统很容易变卡?该怎么解决?看完长知识了...
  4. c语言歌手预测成绩,5个裁判可以对10个歌手进行打分,计算各个歌手的最终得分排列...
  5. [MyBatisPlus]通用枚举
  6. Java源文件声明规则
  7. C++实现井字棋小游戏(写得不好,留作纪念!!!)
  8. 平衡二叉树(AVL树)-详解平衡调整
  9. ipa在线安装搭建_三种越狱工具安装方法
  10. 邻接表2 -试在邻接表存储结构上实现图的基本操作 del_vertex-数据结构-图-icoding