【题解】ABC293E Sol
题目大意
给定整数 \(A,X,M\),求 \(\sum\limits^{X-1}_{i=0} A^i\) 对 \(M\) 取模的值。
数据范围:\(1 \le A,M \le 10^9\),\(1 \le X \le 10^{12}\)。
题目分析
直接算显然会 T 飞,所以尝试把这个式子弄成一些比较好求的玩意儿。
手玩一下样例。例如 \(A=8,X=10\) 时,答案就为 \(\sum\limits^{10-1}_{i=0} 8^i=8^0+8^1+\cdots+8^9=(8^0+8^5)(8^0+8^1+8^2+8^3+8^4)=(8^0+8^4)(8^0+8^1+8^2+8^3)+8^8+8^9=\cdots\)。也就是说,我们可以把整个式子分解成关于 \(A\) 的两个多项式的乘积加上若干个 \(A\) 的幂次方的形式,求出这两个多项式的值乘起来并加上剩下几个 \(A^i\) 即可。
但是这样似乎还不能完全解决问题,要是这两个多项式的长度太长或者剩余的 \(A^i\) 太多,照样 T,考虑控制两个多项式的长度和 \(A^i\) 的数量。
于是我们就可以想到一个叫根号的东西。
可以把式子拆成如下形式:\(\sum\limits^{X-1}_{i=0} A^i=(A^{0\times[\sqrt{X}]}+A^{1\times[\sqrt{X}]}+\cdots+A^{([\sqrt{X}]-1)\times[\sqrt{X}]})(A^0+A^1+\cdots+A^{[\sqrt{X}]-1})+A^{[\sqrt{X}]\times[\sqrt{X}]}+A^{[\sqrt{X}]\times[\sqrt{X}]+1}+\cdots+A^X\),比如 \(A=8,X=10\) 时,答案就可表示成 \([(8^0+8^3+8^6)(8^0+8^1+8^2)+8^9]\)。这样,两个多项式的长度和剩余 \(A^i\) 的数量最多也不会超过 \([\sqrt{X}]\),而 \(X\le 10^{12}\),理论上能过。
但理论上能过并不代表它不会 T。如果用了一些常数比较大的写法的话这个做法依然是过不去的。比如按下面代码里的写法,快速幂使用递归时会 T 掉几个点,而换成循环快速幂就能 1500ms 卡过,不要问我怎么知道的。
(其实出题人完全可以把 \(X\) 开成 \(10^{18}\),把这个解法彻底卡掉,但良心出题人似乎特意把这种做法放过去了?)
代码
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define pii pair<int,int>
#define pll pair<ll,ll>
using namespace std;
ll a,x,MOD,len,ans,sum,sum1;
ll qpow(ll x,ll y) {
ll mul=1;
while (y) {
if (y&1) mul=mul*x%MOD;
x=x*x%MOD,y>>=1;
}
return mul;
}
int main() {
scanf("%lld%lld%lld",&a,&x,&MOD),a%=MOD;
len=sqrt(x);
for (ll i=0;i<len;i++)
sum=(sum+qpow(a,i))%MOD,sum1=(sum1+qpow(a,i*len))%MOD;
for (ll i=len*len;i<x;i++) ans=(ans+qpow(a,i))%MOD;
printf("%lld",(ans+sum*sum1%MOD)%MOD);
return 0;
}
【题解】ABC293E Sol的更多相关文章
- [Sgu395][bzoj2363]Binary Cat Club
一道神题…… rzO 发现立杰在初三(http://hi.baidu.com/wjbzbmr/item/4a50c7d8a8114911d78ed0a9据此可以推断)就怒A了此题…… Orz /*** ...
- POJ - 题解sol[暂停更新]
初期:一.基本算法: (1)枚举. (poj1753,poj2965) poj1753 话说我用高斯消元过了这题... poj2965 巧了,用高斯消元01矩阵更快(l o l). (2)贪心(poj ...
- [bzoj\lydsy\大视野在线测评]题解(持续更新)
目录: 一.DP 二.图论 1.最短路 2.强连通分量 三.利用单调性维护 四.贪心 五.数据结构 1.并查集 六.数学 1.计数问题 2.数学分析 七.博弈 八.搜索 /////////////// ...
- Codeforces Round #466 (Div. 2) 题解
人生中第三次\(CF\)... 考试中切了\(A\)~\(E\) \(F\)题会做没时间写 题解 A:Points on the line 题意 给定一个数列,删最小的数,使最大差不大于一个定值 So ...
- C#版 - Leetcode 593. 有效的正方形 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- C#版[击败100.00%的提交] - Leetcode 6. Z字形变换 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- CF449 (Div. 1简单题解)
A .Jzzhu and Chocolate pro:现在给定一个大小为N*M的巧克力,让你横着或者竖着切K刀,都是切的整数大小,而且不能切在相同的地方,求最大化其中最小的块. (N,M,K<1 ...
- CF446 (Div. 1)简单题解
A .DZY Loves Sequences pro:给定长度为N的序列,你最多可以改变一个数的值,问最长严格上升子序列长度. N<1e5. sol:分几种情况,一种的不改变: 一种是改变,然后 ...
- HGOI20181029模拟题解
HGOI20181029模拟题解 /* sxn让我一定要谴责一下出题人和他的数据! */ problem: 给出十进制数a,b,然后令(R)10=(a)10*(b)10,给出c表示一个k进制数(1&l ...
- 喵哈哈村的魔法考试 Round #1 (Div.2) 题解
喵哈哈村的魔法考试 Round #1 (Div.2) 题解 特别感谢出题人,qscqesze. 也特别感谢测题人Xiper和CS_LYJ1997. 没有他们的付出,就不会有这场比赛. A 喵哈哈村的魔 ...
随机推荐
- Ubuntu20.04 Docker搭建远程xfce桌面以及ssh教程
简介:本文主要介绍ubuntu20.04容器中搭建xfce远程桌面.C++.Go环境.容器内docker操作配置. 一.创建容器1.创建容器 docker pull ubuntu:20.04docke ...
- express获取登录服务器的IP地址
let ip = (req.headers['x-real-ip'] || req.connection.remoteAddress).slice(7);
- Font 'STSong-Light' with 'UniGB-UCS2-H' is not recognized. 问题解决方法
先说结论,这是由于itext和asian版本不一致造成的. 如果你的需求仅仅是生成pdf,则使用解决办法1,如果需求有导出word则使用解决办法2 解决办法1: 将pom文件的com.lowagie ...
- MySql中执行计划如何来的——Optimizer Trace
作者:京东物流 籍磊 1.前言 当谈到MySQL的执行计划时,会有很多同学想:"我就觉得使用其他的执行方案比EXPLAIN语句输出的方案强,凭什么优化器做的决定与我得不一样?".这 ...
- STM32 + RTThread + UGUI
一.概述 开发板:STM32F103C8T6 显示器:ST7735S RT-Thread:5.0.0 玩过 GUI 的小伙伴都知道,界面的显示是一个个像素点组合起来的,那么直接构建出来炫酷的 GUI ...
- 超声波、毫米波、ToF激光雷达——在低功耗场景的应用选型
前言: 目前主要的测距方式有:光学测距,超声波和微波雷达测距. 光学测距又可以分为:双目,结构光,ToF.微波雷达,在消费类产品中,常见的是波长在毫米级别的毫米波雷达.超声波应用比较多的是在车载倒车雷 ...
- 2021-12-26:给定一个长度为n的数组arr,求有多少个子数组满足 : 子数组两端的值,是这个子数组的最小值和次小值,最小值和次小值谁在最左和最右无所谓。 n<=100000(10^5) n*
2021-12-26:给定一个长度为n的数组arr,求有多少个子数组满足 : 子数组两端的值,是这个子数组的最小值和次小值,最小值和次小值谁在最左和最右无所谓. n<=100000(10^5) ...
- 2021-07-13:恢复二叉搜索树。给你二叉搜索树的根节点 root ,该树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。进阶:使用 O(n) 空间复杂度的解法很容易实现。你能想出
2021-07-13:恢复二叉搜索树.给你二叉搜索树的根节点 root ,该树中的两个节点被错误地交换.请在不改变其结构的情况下,恢复这棵树.进阶:使用 O(n) 空间复杂度的解法很容易实现.你能想出 ...
- 探索JS中this的最终指向
js 中的this 指向 一直是前端开发人员的一个痛点难点,项目中有很多bug往往是因为this指向不明确(this指向在函数定义时无法确定,只有在函数被调用时,才确定该this的指向为最终调用它的对 ...
- 一次 SSH 攻击与处理小记
这是我在简书看到的一个作者经历,结合小编自己的一些实践,抛砖引玉,给大家分享一下. 有段时间发现集群异常卡顿.担心的事情终于发生了,使用命令 lastb 查看了一下,我的天呢,好多未知的 IP,我随便 ...