【题解】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 喵哈哈村的魔 ...
随机推荐
- scikit-learn 中 Boston Housing 数据集问题解决方案
scikit-learn 中 Boston Housing 数据集问题解决方案 在部分旧教程或教材中是 sklearn,现在[2023]已经变更为 scikit-learn 作用:开源机器学习库,支持 ...
- 【从零开始】Docker Desktop:听说你小子要玩我
前言 缘由 捡起遗忘的Docker知识 由于本狗近期项目紧任务重,高强度的搬砖导致摸鱼时间下降.在上线项目时,看到运维大神一系列骚操作,docker+k8s的知识如过眼云烟,忘得干净的很.所以想重新恶 ...
- 设置Windows主机的浏览器为wls2的默认浏览器
这里以Chrome为例. 1. 准备工作 wsl是可以使用Windows主机上安装的exe程序,出于安全考虑,默认情况下改功能是无法使用.要使用的话,终端需要以管理员权限启动. 我这里以Windows ...
- Callback详解
Callbacks Callback Registration 在 Rails 中,回调(Callbacks)是一种在模型对象的生命周期中执行特定代码的机制.回调可以在模型对象的创建.更新.删除等操作 ...
- 读《mysql是怎样运行的》有感
最近读了一本书<mysql是怎样运行的>,读完后在大体上对mysql的运行有一定的了解.在以前,我对mysql有以下的为什么: InnoDB中的表空间.段.区和页是什么? redo log ...
- mysql大表修改工具: pt-online-schame-change
在表数据量很大的时候直接添加字段,以及其他表结构修改,会严重影响线上使用,而且耗费时间很长:使用这个工具可以很好的在线修改表结构. 好处: 降低主从延时的风险 可以限速.限资源,避免操作时MySQL负 ...
- 如何借助分布式存储 JuiceFS 加速 AI 模型训练
传统的机器学习模型,数据集比较小,模型的算法也比较简单,使用单机存储,或者本地硬盘就足够了,像 JuiceFS 这样的分布式存储并不是必需品. 随着近几年深度学习的蓬勃发展,越来越多的团队开始遇到了单 ...
- class类 和 react类组件
类的理解 1 // 创建一个person类 2 class Person { 3 /* */ 4 // 构造器方法 5 constructor(name, age) { 6 // this指向 =& ...
- Win HttpRunner3 + Allure 实现接口自动化
HTTPRunner3介绍: HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试.性能测试.线上监控.持续集成等多种测 ...
- #Powerbi 理解VAR函数
VAR意思即为变量,在编程语言中,变量是一个重要概念,DAX作为一种语言也有变量概念,利用VAR,我们可以缩短我们一些DAX语句的长度,更清晰的表达我们的度量值计算逻辑. 举例说明: 我们要计算一个产 ...